<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta name="viewport"
          content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <link href="../Styles/base.css" rel="stylesheet" type="text/css"/>
</head>

<body>
<p>About Face 4 :交互设计精髓</p>

<p>指定文档格式</p>

<p>在图 14-3 所示对话框的底部有一个组合框，用户可以指定文件的格式，这个功能不应该放在 这里。当把文档格式捆绑到保存动作时，就把保存这件事毫无必要地搞复杂了。在 Word 中，如
    果用户无意中改变了文件格式，不管是保存功能还是接下来的关闭动作都伴随着吓人且出人意料 的确认对话框。覆盖文件类型的情况相对很少出现。保存文件则很经常。这两个功能不应该合并。</p>

<p>从用户的角度看，文档格式 —— 无论它是富文本格式、纯文本还是 Word 格式，都是文档 的特征，而不是磁盘文件的特征。指定文件的格式不应该和保存文件到磁盘的操作关联起来。
    它放在文档属性对话框中更合适，在显示文档文件名的地方旁边可以访问文件类型。界面应该 给这个对话框构建严重警告信息，让用户清楚该功能可能导致重大数据损失。</p>

<p>对于一些绘图程序，用户期望能够将图像以文件保存为多种格式， “ 导出 ” 对话框（多数绘 图软件已经支持这个功能）比较适合这个功能。</p>

<p>还原所做更改</p>

<p>如果用户无意中更改了文档，必须还原，那么已经有了纠正这种操作的工具 .• 撤销（关于 撤销行为的更多信息参见第 15 章 ) 。文件系统不应该作为撤销的代替品来调用，而或许是支持
    这一功能的机制，但并不意味着应该以这样的说法提供给用户。直接去文件系统中做撤销更改 的概念侵蚀了撤销功能。</p>

<p>本节后面要讨论的版本功能展示了如何实现以文件为中心的撤销功能，让撤销与统一文件 模型配合良好。</p>

<p>放弃所有更改</p>

<p>尽管这不是最常见的任务，但我们肯定想要允许用户在打开或者创建一份文档后，放弃所 有更改，所以必须明确支持这个动作。主菜单上放一个简单的 “ 放弃更改 ” 就足够了，而不是
    迫使用户理解文件系统来达到这个目标。表达这一概念的类似实用方式是 “ 还原版本”，这个功 能基于下一节将要介绍的版本系统。因为放弃所有更改会丢失重要数据，所以应该有清楚的警 告标志保护用户，让这个功能相对也比较容易撤销。</p>

<p>创建版本</p>

<p>创建版本命令和复制命令非常类似。不同之处在于，创建版本的这种复制操作由应用来管 理，展现给用户的是一个单一的文档实例，还应该清楚地告诉用户，可以返回到每个版本创建
    时的文档状态。使用者还应该可以看到版本列表，以及每个版本的统计数据，如每个版本记录 的时间和大小或长度。点击一下，用户就能选择一个版本，同时也立即选择了该版本为当前活</p>

<p>274<br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p>动文档。选择版本时正在操作的那个文档则保存成一个版本。而且，由于现在磁盘空间不是什 么稀缺资源，所以有规律地生成版本是有意义的，以防用户自己没有定时创建版本。</p>

<blockquote>
    新型 “ 文件”菜单
</blockquote>
<blockquote>
    我们的新文件菜单现在看上去类似于图 14-6, 下面描述其中的功能。
</blockquote>
<blockquote>
    • 新建（ New) 和打开（ Open) 和旧式菜单的一样。
</blockquote>
<blockquote>
    • 关闭（ Close) 在自动保存更改后关闭文档，不会显示对话框，或其他乱七八糟的东西。
</blockquote>
<blockquote>
    • 重命名 / 移动（ Rename/Move) 弹出对话框，用户可以重命名当前的文件，或者移动到 另一个目录中。
</blockquote>
<blockquote>
    • 创建副本 （Create a Copy) 会创建一个当前文档的新副本。
</blockquote>
<blockquote>
    • 打印（ Print) 把所有和打印有关的控件收集在一个对话框中。
</blockquote>
<blockquote>
    • 创建版本 （Create Version) 和复制功能类似，只不过程序管理这些副本的方式用“还 原版本 ” 菜单项打开一个对话框。
</blockquote>
<blockquote>
    • 放弃更改 （Abandon Changes) 放弃自打开或者创建以来的所有更改。
</blockquote>
<blockquote>
    • 属性（ Properties) 打开一个对话框，让用户更改文档类型。
</blockquote>
<blockquote>
    •
</blockquote>
<blockquote>
    <img align="baseline" alt="" height="186" src="../Images/Image00156.jpg" width="156"/>
</blockquote>
<blockquote>
    退出（ Exit) 现在就是关闭文档和程序。
</blockquote>
<p>Open</p>

<blockquote>
    Recent Documents
</blockquote>
<p>SkyDrive <font size="2">!〇</font> Computer Add a Place Abandon Changes</p>

<blockquote>
    <font size="2">图</font> <font size="6">14-6</font> <font size="2">修订后的文件菜单更好地反映了用户的心理模型，而不是程序员的实现模型。用户只拥有一个文件。只要用户
    愿意，就能跟踪文档副本，或者创建一个副本，可以重命名、放弃所有更改，或更改文件格式。用户不必理解或者担心 内存中的版本和磁盘上的版本有什么区别。</font>
</blockquote>
<blockquote>
    275
</blockquote>
<p>文件菜单的新名字</p>

<p>既然我们展示的是统一存储模型，而不是分属硬盘和内存的二元化实现模型，就不再需要 把应用程序最左端的菜单称为 “ 文件 ” 菜单。 “ 文件 ” 菜单反映的是实现模型，而不是用户的模 型。文件菜单有两个合理的替代方案。</p>

<p>可以根据应用程序处理文档的类型来给菜单加标签，例如，电子表单应用程序可能会将其 最左端的菜单命名为 “ 表单 ” ；发票应用程序可以将 “ 文件 ” 菜单改为 “ 发票”。</p>

<p>另一种方法是，可以给左端的菜单加一个更为通用的标签，比如 “ 文档”。这对于字处理软 件、表单，以及绘图应用来说是比较合理的，但对于更为专业、特定的程序来说不合适。</p>

<p>相反，少数应用程序确实用文件的形式来呈现磁盘内容，通常是操作系统 Shell 和工具， 那就应该用 “ 文件 ” 菜单，因为它们就是把文件当文件对待的。</p>

<p>传递状态</p>

<p>如果文件系统需要告诉用户，某个文件不能更改，因为另一个程序正在使用，文件系统应 该向用户指出来。将文件名显示为红色，或者在文件名旁边显示特殊符号，再用工具提示解释 一下，就足够了。新用户可能仍会得到出错信息，如图 14-4
    所示，但至少有视觉和文本线索可 以显示出弹出错误的原因。</p>

<p>在现有的模型中，不仅数据文件有两份，而且程序也分成两份。用户从 Windows 任务栏 的 “ 开始 ” 按钮打开字处理程序，任务栏就相应地出现与 Word 对应的按钮。但如果用户返回 到 “ 开始 ” 菜单， Word
    还在那里！从用户的角度来看，他从工具箱里拿出了锤子，结果发现 锤子还在那里。</p>

<p>这种情况可能还不应该改变。毕竟，计算机的优势之一是能够同时运行软件的多个副本。 但是软件应该帮助用户理解这种很不直观的动作，例如， “ 开始”菜单可以指出这个应用已经在 运行了。</p>

<p><span id="filepos0001476786"></span></p>

<p>是时候要改变了</p>

<p>如果你是开发者，可能会在自己的座位上感到局促，可能会认为我们踩踏了圣地：磁盘上 保存一份原始版本很重要，我们最好不要提倡消灭它。放松！文件系统的实现没有什么问题。
    我们只需要把文件系统对用户隐藏起来，仍能向用户提供磁盘上保留额外版本的好处，而不用 打破用户的心理模型。</p>

<p>如果我们按照用户的心理模型重塑文件系统的呈现模型，就能实现几个重大优势。首先 ,</p>

<p>276</p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p>所有用户都会变得更有效率。如果用户没有被迫花力气和心思管理他们计算机的文件系统，就 能更专注于手头的任务。当然，他们不必因在当代操作系统的版本迷宫中犯了一个小错误，就 会重做数个小时的工作。</p>

<p>其次，我们能教会妈妈如何很好地使用计算机，不用向妈妈解释界面无法解释的行为， 展示程序，解释如何处理文档。处理完成时，妈妈能把文档存在磁盘上，就像放在书架上的 日记一样。我们的解释不舍被 “ 保存更改？ ”
    这样的对话框打断。妈妈们是数字产品消费者 的庞大市场，她们可能拥有、使用计算机和其他设备，但不喜欢、不信任或不能有效地使用 这些设备。</p>

<p>最后一点优势是，交互设计师不必在产品中融入混乱的文件系统意识。我们能够按照用户 的目标，而不是按照操作系统的需求安排程序中的命令。</p>

<p>有经验的用户在习惯新的用法时，肯定会有初始成本，但远低于你设想的程度。这是因为， 这些强大的用户已经通过学习实现模型，展示了能力和宽容。对于他们而言，学些更好的模型
    没有问题，不会有功能损失。对新用户的好处是即刻而重大的。计算机专业人士在爬上高峰以 后，往往忘记了这座山有多高，但每天都有新人来到计算机珠峰的山脚下，备受挫折。只要竭
    尽所能降低攀爬的高度，就会产生重大影响，这一步将驯服某些最危险的山峰。</p>

<p><span id="filepos0001479942"></span></p>

<p><font size="6">重新考虑数据检索</font></p>

<p>现代世界最惊人的一面是，用笔记本、移动设备上的程序上网所能访问到的信息和媒体数 量之庞大。但伴随着无限可能地访问无穷数据的是一个艰难的设计问题：如何才能让人们轻易 地找到要找的数据？更重要的是，如何才能让人们找到需要的数据？</p>

<p>幸运的是，这方面己经取得了长足进步： Google 有多种搜索引擎，苹果在 OS X 中有高效 的 Spotlight 功能（稍后详谈）。但是，尽管这些解决方案指出了一些有效的交互，但它们实际 上只是蜻蜓点水。 Google
    搜索可能在网络上査找文本、图像或者视频内容时非常有用，但这并 不必然意味着同样的交互模式适用于更加精准的检索场景。</p>

<p>就像交互设计中的几乎所有交互问题一样，我们发现酝酿恰当的解决方案必须从彻底理 解用户的心理模型和使用场景着手。有了这些信息，就能构建存储和检索系统来实现具体的
    目的。本章从交互的角度讨论数据检索，展示一些以人为本的方法来解决查找有用信息这个 问题。</p>

<blockquote>
    277
</blockquote>
<p><span id="filepos0001482093"></span></p>

<p>存储与检索</p>

<p>存储系统 （storage system) 是将物品安全储藏在仓库里的方法。存储系统由容器和工具组 成，容器负责在存储系统中存取对象。工具是根据某些关联值（如名称、位置或某些内容属性 ) 在仓库里寻找并取回东西的方法。</p>

<p>在物理世界中，存储和检索密不可分地联系在一起。把一个物品放在架子上（存储）的同 时也给了我们日后找到它的途径（检索）。在数字世界中，唯一联系这两个概念的是我们不完善
    的思维。计算机有着异常高级的检索技术，但前提是我们能够突破传统思维。</p>

<p>传统上，数字存储和检索机制基于 “ 文件夹 ” （ folders) 或 “ 目录 ” （ directory) 概念。文件 夹的隐喻的确给我们提供了一种有用的方式来访问计算机的存储和检索系统（和存取物理对象 差不多）。但正如我们在第
    13 章讨论的，这种交互模式的隐喻有局限。最终，仅使用文件夹或 者目录作为检索机制要求用户知道某项东西放在哪里，才能找到它。这就很不幸了，因为数字 系统有更好的方法来寻找信息，远超过使用机械机制的物理世界。但在我们讨论如何改善检索
    之前，先简要地讨论一下检索系统如何工作。</p>

<p><span id="filepos0001484319"></span></p>

<p>物理世界的检索</p>

<p>在家里，如果我们有一本书或者一把锤子，没有必要给它起名字或者提供一个永久存放处。 书可以通过名字以外的其他特征识别出来，如颜色或者形状。不过，积累了大量物品需要查找 和使用以后，如果组织更有条理会更好。</p>

<p>按位置检索</p>

<p>书和锤子有一个合适的位置放置是很重要的，因为在需要时，我们可以通过位置找到它。 我们不能指望吹个口哨，书和锤子就自己跑过来。我们必须知道它们在哪里，然后去那里取。 在物理世界里，事物的实际位置意味着找到它的途径。记住把它放在哪里 ——
    它的地址 —— 对于找到它，以及放好它便于再次找到都至关重要。例如，想找一个勺子，就到自己放勺子 的地方，而不会通过勺子的固有特征来找它。类似地，查找图书时，要么去自己放书的地方，
    要么猜测它和其他书放在一块。我们不是通过关联来找书的。也就是说，不会通过书的内容 来查找。</p>

<p>在这种模型中，存储系统就是检索系统，二者都基于记住位置。存储系统和检索系统密不 可分。</p>

<p>278</p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p>基于索引的检索</p>

<p>按位置检索听起来非常好，但也有缺陷：受限于人类记忆水平。尽管按位置检索可以用在 家里的图书、锤子和汤勺上，但换成国会图书馆（ LibraryofCongress) 的藏书就不管用了。</p>

<p>对于图书馆书架上的书报，我们利用一种分类系统来帮助查找所需的资料。采用杜威十进</p>

<p>制图书分类法 （Dewey Decimal System )，或其国际衍生系统 通用十进制分类法 （Universal Decimal Classification system), 每本书按照主题分酉己一个唯一的 “ 图书编目号码
    ’’（call number )。</p>

<p>然后按照数字顺序（下一级按照作者的姓氏字母顺序）排序，结果整个图书馆的书便按照主题 有序地组织起来了。</p>

<p align="right" height="6pt" width="0pt">唯一遗留的问题是如何找出某本书的编号。当然不会有人会记得每一个号码。解决的方法 是用索引（ index),
    或者一份记录集合，允许人们通过查找图书属性，如名字，来找到图书的</p>

<p>位置。</p>

<p>传统的图书馆分类卡片提供了 3 个查找属性：作者、主题和标题。图书进入图书馆系统， 标上了书号，然后为每本书创建三张卡片，包括所有细节和杜威十进制编号。每张卡片以作
    者姓名、主题或者标题开头。这些卡片按字母顺序放在各自的索引中。想找一本书，就找其 中一个索引，找到图书编号。然后通过检查标牌，找到与目标编号范围相同的那排书架，书
    就在这排书架上；再搜索具体书架，按照数字的词汇顺序缩小寻找范围，直到找到所要的那 本书。</p>

<p>这样，通过参与到存储系统中，在物理上找到了这本书，但是逻辑上要找到书需要参与到 检索系统中。书架和书号是存储系统。卡片索引是检索系统。用一套系统确定所要的书，用另
    一套系统找到它。在典型的大学或者专业图书馆，读者是不允许进入书库的。作为一个顾客， 你只能使用检索系统确定自己想要的书。图书管理员再通过存储系统帮你拿到书。图书的唯一
    编号是这两个独立系统之间的桥梁。在物理世界中，检索系统和存储系统可能都需要大量劳动。 特别是在较旧、没有计算机化的图书馆中，这些都是一成不变的。例如，想要根据收录日期加 上第四条索引，对图书馆来说比登天还难。</p>

<p><span id="filepos0001490209"></span></p>

<p>数字世界的检索</p>

<p>与书籍、书架和卡片构成的物理世界不同，在计算机中添加索引并不困难。具有讽刺意义 的是，在一个至少可能轻易实现动态、关联性检索机制的系统中，我们往往除了存储系统，不
    实现任何检索系统。如果想要找到磁盘上的某个文件，就必须知道文件名和存储位置。就像走 进图书馆，烧掉了卡片分类，然后告诉顾客，只要记住书脊上的小编号，就能轻易找到想找的 书一样。这是把百分之百的文件检索重担压到了用户的记忆上，而
    CPU 却闲置着，在数十亿个</p>

<blockquote>
    279
</blockquote>
<p>无指令操作中摆弄着它的数字拇指。</p>

<p>尽管桌面计算机可以处理上百种不同的索引，但我们忽略了这种能力，经常没有任何指向 磁盘存储文件的索引。相反，为了再次找到它们，我们不得不记住文件存放的位置及文件名。
    这种遗漏是现代软件设计中最具破坏性、最落后的一步。这种失败归因于文件及其存在的组织 系统之间相互依赖。而在机械世界中，这种相互依赖是不存在的。</p>

<p>我们创造出的磁盘存储系统本身并没有什么问题。唯一的问题是我们没有能够创造出一套 有效的磁盘文件检索系统。相反，我们把存储系统交给用户，称之为 “ 检索系统”。这有点像给
    了一个人一袋子食品杂货，告诉他这是一顿美味的晚餐。但不必改变文件存储系统。 UNIX 模 型本身也没有什么问题。应用程序可以很容易记住所用文件的名字和位置，所以检索系统不是 给程序用的，而是给人类用户用的。</p>

<p>数字检索方法</p>

<p>在计算机上找到一个文档有 3 种基本方式：可以记住它在文件结构目录中的位置，这是位 置检索；可以通过记住它的文件名来找到它，这是标示检索（需要注意这两种方法通常一起使 用）；第 3
    种方法是关联或基于属性的检索，这是以文档某些固有特性为基础来查找文档。例如， 你想找一本有红色封面的书，或一本关于轻轨交通系统的书，或者一本有蒸汽机车图片的书， 或者一本提到西奥多 • 朱达 (u (Theodore Judah)
    的书，就必须使用关联检索。</p>

<p>位置检索和标示检索结合起来，构成了数字存储系统的基础。不过，多数数字系统没有 提供关联式存储方法。无视关联方法，我们也就否决了一切基于属性的搜索，结果就必须依
    赖人类的记忆力来回忆文档的位置和标示。用户必须知道文档的标题以及存储的位置才能找 到它。例如，要找到一份计算了住房贷款分期还款的电子表格，用户必须知道已经将其保存 在 Home 目录下，知道电子表格的名字为 “amort 1”
    。如果忘记了任何一点，就很难找到这份 文档。</p>

<p>基于属性的检索系统</p>

<p>对于早期的图形用户界面系统，如最初的麦金塔，位置检索系统几乎合情合理：桌面隐喻 支配着这套系统（不必使用索引查找桌上的文件），在 144ICB 的软盘中也不能存储太多的文件。 如今的桌面系统可以轻易地存储多达以前 500
    万倍的文档（更不必说一个小小的局域网络即可 提供对文件的访问）！但是，我们仍然使用同一套古老的隐喻和检索模型管理数据。我们继续严 格按照存储系统的实现模型呈现软件的检索系统。人们无视使用一套系统来查找文件的力量和</p>

<p>①译者注：19世纪中期美国铁路工程师，设计了太平洋铁路。</p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p>易用性 ， 这样的文件查找系统与文件保存系统完全不同。</p>

<p>基于属性的检索系统能够让用户根据文档的内容或者有意义的属性（比如上次编辑过的时 间）找到文档。这种系统的目的在于为用户提供一种机制，以便使用者可以按照他们所思考的 方式来査找所要的东西。例如，一位女销售员要寻找最近刚刚发给一个名为
    “Widgetco ”的顾 客的建议书。这时她就可以告诉系统： “ 请把昨天我编辑、打印过的关于 Widgetco 的 Word 文 档显示出来 。”</p>

<p>一个设计良好的基于属性的检索系统，还可以让用户按同义词、相关主题或者具体文档的 指定属性查找文件。用户可以动态定义具有重叠属性的文档集。再回到刚才那位女销售员的例
    子中，她给每一个潜在用户都发过建议书，每份建议书都不同，并且会根据相关客户进行分组。 不过，这些建议书之间有一定的关联，因为它们都是为同一个功能服务的：建议某种业务关系。
    如果她可以找到并将所有的计划书收集在一起，同时允许每个计划书保持独立性及其与特定客 户的相关性，那会很方便 。一 个基于位置（单一存储位置）的文件系统必须按照单个属性（客 户或者文档类型）存储每份文档 ，
    而不能根据多个特征来存储文档。</p>

<p>检索系统只需能够睁大眼睛竖起耳朵，就可以知道许多有关文档的信息。如果某检索系统 记住了一部分信息，就不必给用户强加许多负担。例如，它可以轻易地记住下面这些信息：</p>

<p>• 创建文档的用户或者参与写作文档的用户。</p>

<p>• 创建文档的设备。</p>

<p>• 创建文档的应用程序。</p>

<p>• 文档内容与类型。</p>

<p>• 最近一次打开文档的应用程序。</p>

<p>• 文档大小，是否非常大或者非常小。</p>

<p>• 文档是否已经很长时间没有动过了。</p>

<p>• 上次打开文档距离现在多久了。</p>

<p>• 上次编辑时添加或者删除了多少信息。</p>

<p>• 文档是新建的还是复制过来的。</p>

<p>• 文档是否经常编辑。</p>

<p>• 文档是否经常查看但很少编辑。</p>

<p>• 文档是否打印过，在哪里打印的。</p>

<p>• 文档打印的频率，每次打印前是否改动。</p>

<p>• 文档是否发过传真，发给了谁。</p>

<p>• 文档是否发过电子邮件，发给了谁。</p>

<p align="right" height="3em" width="0pt">281</p>

<p><img align="baseline" alt="" height="83" src="../Images/Image00134.jpg" width="113"/></p>

<p>About Face 4 :交互设计精髓</p>

<p>苹果电脑 OS X 中的搜索工具 Spotlight 提供了基于属性的有效检索（参见图 14-7 )。用户不 仅可以按照有意义的属性来查找文件，还可以把这些搜索结果保存为 “ 智能文件夹”。这样用户
    就可以在一个位置查看与某个特定客户相关的文档，在另一个位置查看所有的建议书（不过还 是要花些精力自己辨识每个建议书，因为 Spotlight 还无法做到这一点）。这里我们要提一下， Spotlight
    最重要的实用因素之一是它的查找速度飞快。这是它和 Windows 搜索功能的一个重要 区别。 Spotlight 之所以能做到这一点，是一种有意的技术设计，这使它可以在空闲时间索引内容。</p>

<p>e 〇 〇</p>

<p><i>L±JU</i> <font size="1">、</font></p>

<blockquote>
    <font size="1">Searching 'Dropbox*</font>
</blockquote>
<p align="right" height="7pt" width="0pt">…， 一</p>

<p><font size="1">This Mac Shared</font></p>

<p><font size="1">acooper</font></p>

<p align="right" height="0pt" width="0pt"><font size="1"><font color="#FFFFFF">Oropbox</font></font></p>

<p><font size="1">Saw</font></p>

<p align="right" height="4pt" width="0pt"><font size="1">-</font></p>

<p><font size="1">^ All My Files</font></p>

<p><font size="2">臀</font> <font size="1">AlrOrop</font> <font size="2">議</font> <font size="1">Desktop #</font> <font
        size="1">9</font> <font size="1">&gt;tn</font> <font size="2"><i>^</i></font> <font size="1">Applications
    Documents</font> <font size="6"><i>SHMm</i></font> <font size="2"><i>■ m</i></font> <font size="1">bart _</font></p>

<p><font size="1">_ apu _ barney cooper037</font> <font size="2"><i>^</i></font> <font size="1">cooper067</font></p>

<p><font size="2">逼</font> <font size="1">AII..-</font></p>

<p height="0pt" width="0pt"><font size="5">OCVJCES</font></p>

<p align="right" height="0pt" width="0pt"><font size="1">Macintosh HO</font></p>

<p><font size="1">coop«r_com_tim«mach»ne.pnfl ‘ coop«r.com_desM〇p_ame«r 鏈</font> <font size="1">coop*r.com_s«nrtc«」u丨8.fw.pn〇
    ^ O&gt;oper.com-contaa$+s«rvlces-05 2 213 - nm .fw. png cooper.com2013.l-29-13.fw.pnfl
    coop«r.c〇m2013_l-BO-13.fw.pnfl ^ c〇〇p#r.c〇m2013_l-31-13.fw.png</font> <font size="1">coop«r.com2013_Desktop_0307.fw.png
    4 cooper.com2013_mast« r_De*Ktop_0603.fw. png</font> <i>4</i> <font size="1">coop«r.com2013_master_0«sktop_0606.fw.pflg</font>
    <font size="1">.coop«r.com2013.ma5ter_Mob(le.fw.pn〇</font></p>

<p><font size="1">^ mob丨丨t_coopef_comjs«rvlc«s」Mcm.fw.png</font> <i>ti</i> <font size="1">wwb_cooper.com„sefVic€sJason.fw.png
    cooper-mega-nascaf-4.psd coop«r-mega-nascar-5.psd</font> Adobe FJrewoi Adobe Firewoi Adobe Firework Adobe Firework
</p>

<p align="right" height="0pt" width="0pt"><i>zm</i></p>

<p><font size="1">Adobe Fireworks PNC FHt Adobe Fireworks PNC Rtt :F“e</font> ；FUe <font size="1">forks PNC Fite</font>
    <i>i</i> <font size="1">PNC File Adobe Fireworks PNC Fite Adobe Fireworks PNC File Adobe Fireworks PNC File :^ooq«
        rirmfofKs：</font></p>

<p><font size="1">Adobt Fireworks PNC</font> <font size="2">Fite</font> <font size="1">Adobe Fire%w〇rks PW Flit Adobe
    Fireworks Adob€ Photosh&lt;</font> Adobe Photoshop file Adobt Photoshop JPEG flit</p>

<p><font size="1">OfksPNG F &gt;shop file</font></p>

<p><u>0</u> <u>④</u></p>

<p><font size="1">last Opened Jun 24. 2013 4:08 PM jun4, 2013 11:S0 AM Jul 10. 2013 2.34 PM Jun 5. 2013 10:26 AM F«b
    1,2013 10:49 AM Jon 4, 2013 11:47 AM Jun 4, 2013 11 48 AM Jun 4, 2013 11:49 AM</font> <i>tun</i> <font size="1">10,2013
    IlclSAM Jun 6. 2013 11:40 AM T咖</font> <font size="1">2:07 PM Today 3:52 PM Today 2:05 PM Today 2:07 PM Jun 7. 2013
    3^4 PM Jun 7. 2013 3:24 PH jun 7.2013 4 38 PM</font></p>

<blockquote>
    <font size="2">图</font> 14-7 <font size="2">苹果</font> OS X <font size="2">上的搜索工具</font> Spotlight <font size="2">允许用户根据有意义的属性来查找文件，例如名称、文档类型、上次打开
    位置。</font>
</blockquote>
<p>用户无须事先明确地将文件组织起来，就可以利用基于属性的检索系统来查找文件。但允 许用户给文档加标签或者手动指定属性也非常有价值。这可以让用户填补上技术无法识别所有
    有意义属性的空缺，还能让人们根据讨论和使用信息的方式定义实际的组织方案。通过设置标 签实现的检索机制通常也被称为 “ 分众分类法 ” （ folksonomy ),这个词汇是著名的信息架构师 托马斯 • 范德 • 瓦尔
    （Thomas VanderWal) 创造出来的。分众分类法在社交和合作场合下非常 有用。如果强迫所有人遵循一套受控的词汇或者用这套词汇思考，会不受欢迎或不切实际，分 众分类法就是全局定义的分类法（ taxonomy)
    的替代品。使用标签来促进信息检索的优秀例子 有 Flickr 、 del.icio.us ，以及非常流行的社交分享应用 Twitter ( 参见图 14-8 )。</p>

<p>282</p>

<p><br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p align="center" height="0pt" width="0pt"><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00123.jpg"/></p>

<p>图14-8 Twitter的标签已经成了主流文化的一部分.这是分众分类法被普遍采用的经典案例.</p>

<p><br/>
    <br/>
    <span id="filepos0001511893"></span></p>

<p>关系数据库 VS .数字汤</p>

<p>使用数据库技术软件对用户有两个简单的要求。首先，用户必须预先定义数据形式；其次 , 用户必须遵守该定义。使用软件的人类用户还有两个事实：首先，用户很少能提前表达自己想 要什么；其次，即使能表达具体需求，也会经常改变主意。</p>

<p>组织难以组织的事物</p>

<p>生活在互联网时代，我们越来越频繁地发现，信息系统无法通过关系数据库的检测。我们 既不能提前定义信息，也不能可靠地坚持所设想的定义。特别是互联网中两个最常见的组成部 分更凸显了这种两难的境地。</p>

<p>首先，考虑一下电子邮件。数据库中的每个记录有特定的标志，因此属于相同类型的对象 表。而电子邮件信息不能很好地套用这个范式。我们可以将电子邮件分成接收和发送两类， 但这没有什么帮助。如果你收到一封来自 Jerry 的邮件，是关于
    Sally 的，讨论了 Ajax 计划， 而且该计划又与 Jones Consulting 公司和你在董事会的联合陈述相关。你可以将它保存在 Jerry 文件夹或者 Sally 文件夹或者 Ajax
    文件夹中，但是你真正想做的是将它保存在所有的文件夹 中。在 6 个月之内，你可能因为无数无法预料的原因要找到这条消息，无论原因是什么，你</p>

<blockquote>
    283<br/>
    <br/>
</blockquote>
<p>About Face 4 :交互设计精髓</p>

<p>都希望能够找到它。</p>

<p>其次，考虑一下 Web 。 Web 就像一个无限、混乱、冗余、无人监管的硬盘一样，毫无结构 可言。互联网上有大量的信息，但是因为其数量庞大，多种多样，根本没法利用任何常规系统。 即使 Web
    可以被组织起来，这种方法可能也只存在于外部，因为它的内容属于上百万个体所有， 谁都不隶属于任何权威机构。和数据库中的记录不同，我们不能指望在互联网上找到预先设置 好的信息。</p>

<p>数据库的问题</p>

<p>数据库还有一个问题：所有数据库记录都是单一、预定义的类型，一种记录类型的所有实 例被组织在一起。一条记录可能代表一个发票或者一个客户，但是不能既代表发票又代表客户。
    同样，记录内的字段可能是一个名字或者一个社会保险号码，但不可能既是一个名字，又是一 个社会保险号码。这是所有数据库的一个基本概念，其主要目的是允许我们在存储系统中加上 秩序。不幸的是，它不能解决我们的电子邮件检索问题。来自
    Jerry 的电子邮件是 “ 电子邮件 ” 记录类型，这是不够的。我们必须同时可以将它标示为 “Jerry” 、 “Sally” 、 “Ajax”、“Jones Consulting” 或者 “ 董事会 ”
    类型的记录。我们还必须能够随意添加或者改变它的标示，甚至在 记录已经存储之后。再者，一个 “Ajax” 类型的记录可能是指文档，如一个项目计划，而不是 电子邮件信息。因为记录格式是不可预测的，所以标示 Ajax
    记录的值不能可靠地保存在记录中。 这与数据库的工作机制直接矛盾。</p>

<p>数据库确实提供了检索工具，能够比简单地匹配记录类型好一点。数据库可以让人们通过 检查内容和匹配搜索条件来查找和提取记录。例如，我们查找发票号 “77329 ”，或者查找带有 标示字符串 “Goodyear Tire and
    Rubber” 的客户。但是，这仍然不能解决电子邮件问题。如果 允许用户在信息记录中输入关键词 “Jerry” 、 “Sally” 、 “Ajax”、“Jones Consulting” 和 “ 董事会”，
    那就必须提前定义这些字段。但是正如前面提到的，提前定义不能保证用户后来会遵守这个定 义，例如，他可能正在寻找有关公司野餐的消息。另外，添加一系列的关键词字段会引发数据 处理中最基本的常见困境：如果给用户 10
    个字段，那么必然有人会想要 11 个。</p>

<p>基于属性的替代方案</p>

<p>那么，如果关系数据库技术不合适，什么合适？如果用户发现很难像数据库要求的那样提 前定义信息，是否存在可行的存储和检索系统的替代方案呢？</p>

<p>这里的关键还是分离存储系统和检索系统。如果将索引作为检索系统使用，那么存储技术 仍然是数据库。我们可以把存储功能设想成一种数字汤 （digital soup), 所有记录都可以放进去。
    这种数字汤能够接收丢进去的任何记录，无论大小、长度、类型或者内容。无论什么时候输入 记录，程序都将返回一个用于检索记录的令牌。我们所要做的是亮出令牌，数字汤立即返回记</p>

<p>284</p>

<p align="right" height="0pt" width="0pt">第 14 章重新思考数据输入、存储与检索</p>

<p>录。不过这只是存储系统，还需要一个检索系统管理令牌。</p>

<p>基于属性的检索系统就是救星：我们可以创建一个索引，存储一个键值和令牌的副本。 然而真正神奇的是，能够创建无限数量的索引，每一个代表它自己的键，包含一个令牌副本。
    例如，如果数字汤包含所有的电子邮件信息，那么可以为每个老朋友建立一个索引： “Jerry ”、 “Sally” 、 “Ajax”、“Jones Consulting” 和 “ 董事会 ” 。现在，当你需要找到关于董事会的电子
    邮件时，不需要在成打的文件夹中乏味地手动翻找。相反，只要一个查询就会找到需要的所 有信息。</p>

<p>当然，某人或者某物必须填充这些索引，但在交互设计中这是家常便饭。这时需要考虑两 个组成部分：首先，系统必须能够阅读电子邮件消息，自动提取和索引信息，如恰当的名字、
    网址、街道地址、电话号码和其他重要数据；其次，系统必须让用户非常容易地添加特殊的消 息指针。用户指定某些值与特定的电子邮件信息相关，无论这个值是否是从消息中一字不差地
    引用的。输入是可以的，但是从备选列表中选择、点击拖放，以及其他更高级的用户界面习惯 用法可以使任务更轻松。</p>

<p>如果存储系统重要性下降，检索系统从存储系统分离出来并且大幅增强，那么将会有很大 的好处。某些形式的数字汤可以帮助我们控制日常生活中出现的越来越多的不可预料的信息。
    我们可以为用户提供功能强大的信息管理工具，而不需要用户提前配置信息或者在将来遵守配 置。毕竟用户做不到，所以又何必坚持？</p>

<p><span id="filepos0001523035"></span></p>

<p>受限的自然语言输出</p>

<p>本章已经讨论了基于属性的检索系统的优点。这类信息要真正成功，需要一个前端让用户 非常容易地理解复杂且相互关联的属性集。</p>

<p>一种替代方案是使用自然语言处理，用户可以用英语键入他的请求。这种方法的问题是， 当前普通计算机在多数商务条件下，仍不能有效地理解自然语言查询。因此在实验室中，或者
    在严格控制词汇和句法的真实世界的某些具体领域中，它可能工作得不错；但在消费世界中不 行，因为语言有突发奇想、方言、口语、歧义等。在任何情况下，编写自然语言识别引擎程序 均超出了普通开发团队的能力和预算。</p>

<p>还有另一种更加优秀的方法，我们称之为 “ 受限的自然语言输出”，目前已成功地运用在大 量项目中。使用这种技术，程序为用户提供一系列有限控件，让用户从中选择。控件整队排列，
    它们读起来像一个英语句子。用户从有效的选项列表中选择，这种设计在本质上是一个自我建 档的有限查询机制。图 14-9 展示了这一技术的工作原理。</p>

<blockquote>
    285
</blockquote>
<blockquote>
    <font size="1">Wed</font> 8/18/1999 6:27 PM
</blockquote>
<blockquote>
    <img class="responsive-img" align="baseline" alt=""  src="../Images/Image00209.jpg"/>
</blockquote>
<blockquote>
    TueS/29/a»16:53PM * Ap^cation Q File CommarKte -
</blockquote>
<p>3 M <font size="2">獅</font></p>

<blockquote>
    Babvton Trans!at«^. QtestSor <font size="2">祐</font> <font size="2">5</font> PDF Creator <font size="1">CtrlP 棚
    WebStart 州祕JU JUj</font> W«d9/22/1999II: 19AM a Applcatton
</blockquote>

<p><font size="2">图14-9基于属性的检索引擎中受限自然语言输出界面的一个例子。它是Cooper为Softek公司的Storage Manager
    设计软件的一部分。在数据库查询中，这些控件产生的自然语言作为输出，而不是试图接受自然语言作为输入。当单击 每个带下画线的短语时，程序都会提供一个下拉菜单，它带有一个可选择的选项列表。用户从一系列动态的选择中构造
    一个句子，总能保证得到一个有效的结果。</font></p>

<p>SMB <font size="1"><i><s>mmmmmm</s></i></font> Wed5/9/2Q011:JO PM <font size="1"><i>签</i></font> <font size="1"><i>AwkiHon</i></font>
    5f»® <font size="1"><s>麵</s></font> i <font size="1"><s>w_w</s></font> « <font size="1"><s>m</s></font> i <font
            size="1"><s>b</s></font> Thu 8/23/03017:29 PM » ApfAcation , _ mip—uw</p>

<p><font size="1"><font color="#FFFFFF">&amp;)ft^Fnd Onesp^$Rr«d.^x/er</font></font></p>

<blockquote>
    (^HtXeyi 1.01 &lt;te*noin«4llw,e&gt;
</blockquote>
<blockquote>
    一个自然语言输出界面也有助于表达从查询到普通旧式关系数据库的一切。用通常的方式 查询数据库对多数人来说很困难，因为数据库查询需要使用布尔标记符号，以及晦涩的数据库 句法，即 SQL 。
</blockquote>

<blockquote>
    英语不是布尔代数，所以英语句子不是用 AND 或者 OR 连接起来的，而是使用像“以下 均适用 ” 或者 “ 以下并非全部适用 ” 之类的英语短语。用户在这些短语中进行选择会很容易，
    因为它们非常清楚而且有限，用户可以像阅读句子一样检查选择是否有效。
</blockquote>

<blockquote>
    从开发角度来说，自然语言输出最棘手的部分是，在很多情况下，从左侧的控件中选择以 级联的形式改变了右侧控件的内容。这意味着为了有效地实现自然语言输出，选择的语法必须
    提前映射好。而且，控件必须根据其他控件中选择的内容动态地改变或者隐藏。最后，控件本 身必须能够显示数据，或者至少能够动态地加载数据。
</blockquote>

<blockquote>
    另一个关注点是本地化。如果为多种语言设计，词序迥异的语言（如德语和英语）可能会 需要不同的语法映射。
</blockquote>

<blockquote>
    基于属性的检索引擎和自然语言输出界面两者都需要设计和编程上的巨大努力，但用户在 管理数据的效能和灵活性方面会获得极大的好处。因为我们管理的数据以指数增长，所以现在 只要管理数据，就值得给更加强大、目标导向的工具投资。
</blockquote>

<blockquote>
    286<br/>
    <br/>
</blockquote>

<blockquote>
    i -二
</blockquote>
<blockquote>
    I k <font size="2">F=I</font>
</blockquote>
<p align="right" height="2em" width="0pt"><font size="7">防止错误通知决定</font></p>

<blockquote>
    数字革命早期，对话框和消息在软件应用的图形界面中占据着很大比例， 告诉用户他们做错了什么，或者警告用户，计算机或软件由于实际或臆想的技 术限制，无法处理你的请求。《交互设计精髓》第 1 版就是那个时期发行的， 如你所料 ’ 当时第
    1 版对这种状态提出了诸多批评。
</blockquote>
<blockquote>
    如今，由于计算、存储和通信速度增加了不知道几个数量级，先进的编程 工具和技术同样有长足进步，这两类错误信息中的第二类基本没有了。
</blockquote>
<blockquote>
    而第一类错误信息，责备用户犯错误，也已经开始消失（至少在消费者和 移动应用程序领域）。设计者发现了更好的方法以防患于未然，允许用户进行 撤销操作，此外还赋予用户在操作之前预先看到结果的魔法。关于错误防止和
    决定通知的这三种策略，就是本章的主题。
</blockquote>
<p><span id="filepos0001533997"></span></p>

<p><font size="6">运用富视觉非模态反馈</font></p>

<p>大多数的计算机 •( 以及越来越多的设备）拥有高分辨率的显示器和高质量的音频系统。然 而，除游戏之外，很少有应用程序利用过这些高性能设备的皮毛来提供有用的信息，如应用的
    状态、用户的任务和系统及其外部设备。虽然有一整套工具箱可以用于与用户交流；但是直到 最近，大多数设计者和开发都还在使用对话框这一钝器来向用户传递信息（通常是确实有用的 信息）。第 21
    章将详细讨论为什么某些对话框（错误、警告或者确认）不是合适的交流方式。</p>

<blockquote>
    287<br/>
    <br/>
</blockquote>
<p>不幸的是，这意味着有些不易察觉的状态信息干脆从未向用户传达，因为多数设计者知道 用户不喜欢不停地弹出对话框。但是用户又恰恰需要持续的反馈，尤其是积极的反馈。只需要 改变一下交流渠道即可。</p>

<p>本章主要讨论视觉信息以非模态的方式显示在应用程序的主视图时，怎么做才能不打断用 户，才能几乎消灭烦人的对话框。</p>

<p><span id="filepos0001536016"></span></p>

<p>富视觉非模态反馈</p>

<blockquote>
    富视觉非模态反馈 （rich visual modeless feedback ， RVMF )可能是最重要的一种非模态反
</blockquote>
<p>馈方式了。它的 “ 富 ” 在于能够深入全面的信息，让人了解一个进程的状态或者属性，或者当 前应用程序的对象。它的 “ 视觉 ” 是指按习惯方式利用屏幕上的像素（通常是动态的）。它的“非 模态 ”
    在于信息能及时轻松地显示出来，即不需要用户做特殊动作或者转换模式，就能看到和 理解这些反馈。</p>

<p>例如，在微软 Outl 〇〇 k2013 中，邮件发件人的姓名旁边有一个图标，显示出对方是否方便 聊天或者接电话。当实时对话比邮件交流更合适的时候，其便利之处就显现出来了。该图标（以
    及右击即可开启聊天的功能）意味着，用户不需要打幵聊天室客户端去查找发件人的名字来看 他是否方便聊天。这个功能简单方便，用户想都不用想就能用。图 15-1 显示的是该策略的另一 个例子，它是 Cooper 公司为用户设计的。</p>

<blockquote>
    Occ 191 Emp 18 <font size="2">日</font> H 3 Unav 3 = Cap 213
</blockquote>
<blockquote>
    1 » &lt; 3
</blockquote>
<blockquote>
    1 H
</blockquote>
<blockquote>
    n <font size="1">〇</font> 2
</blockquote>
<blockquote>
    3
</blockquote>
<table valign="top">
    <tr valign="top">
        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            &nbsp;

            <p><font size="2">3</font></p><br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>

            <p><font size="2">3</font></p><br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>
            <br/>

            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                Room 304 Contagion Nielen, Gunther James, Herbert</p>
        </td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" colspan="5" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>
</table>

<p><br/>
    <br/></p>

<blockquote>
    <font size="2">图</font> 15-1 <font size="2">该表格来自</font> Cooper <font size="2">设计的一个长期医疗信息系统，是富视觉非模态反馈的典型例子.，表格显示了设备中所有
    的房间。不同颜色分别代表男性的房间、女性的房间、空房间和男女混住的房间；数字代表空床位数，房间之间的小方 块表示共用浴室。黑色的三角表示健康状况，小小的</font> H <font size="2">代表床位已占用。该非模态视觉反馈由工具提示进行补充，工具
    提示显示出房间号和居住者姓名，并突出有关房间或居住者的重要注意事项。顶端显示房间、床位和职员的数量。该显 示屏需要通过简单的学习之后才能掌握，而一旦掌握，护士和设备管理者只要看一眼就能知道设备的状态。</font>
</blockquote>
<blockquote>
    还有一个 iOS 例子：从应用商店里下载应用时，主屏幕会出现一个图标显示下载的文件 , 288
</blockquote>
<p align="right" height="2em" width="0pt">第 15 章防止错诶通知决定</p>

<p>图标上有个小小的动态更新指示器，显示出该应用的下载和安装进度（如图 15-2 所示)。</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00369.jpg"/></p>

<p>图15-2在苹果的应用商店购买应用之后，应用的图标就会在iPad或者iPhone的主屏幕上（右上方）显示。动态更新 的循环指示图标显示下载和安装的进程。</p>

<p><br/>
    <br/></p>

<p>最后一个富视觉非模态反馈的案例源自电脑游戏：希德 • 梅尔 （Sid Meier) 的《文明》 (Civilization)( 如图 15-3 所示）。该游戏的主界面是一个历史世界的地图，上面有许多富视觉
    非模态反馈案例。玩家在游戏中尝试创造一个文明社会，这个文明社会不断演化，玩家就是领 袖。该游戏用富视觉非模态反馈来表示一个城市的动态变化属性，所有元素都是视觉化的。如
    果城市更加先进，它的建筑就会更加现代化。如果城市更大，那么图标也会更大，更多修饰。 如果城市发生动乱，那么城市里就会烟雾缭绕。单独的军队和平民单位也有可视化的状态图标 ,
    通过小的仪表来表示力量和健康状况。连风景都用上了富视觉非模态反馈：当单位移动或者城 市壮大的时候，会有虚线标记出势力范围的变化。修建道路、砍伐森林、开采矿山的时候，地
    形也会有所变化。尽管游戏中也有对话框，但是大多用来理解当前状态的信息，不用词汇和对 话框也能清楚地表达出来了。</p>

<p>想象一下，桌面上或者应用里所有的对象，都有相应的状态信息，如果这些信息都能以这 样的方式显示出来情景会怎样：打印机的图标能够显示还要多久才能完成打印任务；硬盘驱动
    器和可移动媒介的图标，能够显示它们的剩余容量；当选择一个对象并拖曳时，所有能够接收 它的地方都会突出显示，表明这里可以接收对象。</p>

<blockquote>
    289<br/>
    <br/>
</blockquote>
<p>About Face 4 :交互设计精髓</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00107.jpg"/></p>

<p>图15-3《文明》是一个玩家能够掌握城市化进程的游戏。它的界面上提供了许多富视觉非模态反馈的例子。</p>

<p><br/>
    <br/></p>

<p>回想一下应用里的对象及其属性，尤其是那些动态变化的，哪类状态信息对用户来说是至 关重要的 ? 想一想如何才能表现这些信息？当用户注意到并且学会了这种呈现方式，他们看一眼
    就能知道发生了什么（如果用户要求的话，仍要给用户提供一个途径获取完整而详细的信息)。 用富视觉非模态反馈的形式将信息放在应用的主界面，看看能消灭掉多少常用的对话框。</p>

<p>关于富视觉非模态反馈，还需要指出一个重要问题：它不适用于初学者。即使添加了工具 提示，用文本将（应当）添加的所有视觉线索都描述出来，用户还是得花功夫去把它们找出来 ,
    再搞清楚它们的含义。用户需要随时间的推移才会幵始使用富视觉非模态反馈。用户用上富视 觉非模态反馈时，会觉得惊奇；但同时还需要菜单和对话框的支持，才能找到要找的东西。这
    就意味着，用来代替警告和严重错误警示的富视觉非模态反馈必须得让用户格外清楚其含义才 行。确保这一类状态能传递更多信息但不那么重要的富视觉非模态反馈得到视觉上的强调。</p>

<p><span id="filepos0001548678"></span></p>

<p>听觉反馈</p>

<p>在数据输入的环境中，文员经常连续数小时坐在电脑屏幕前输入数据。这些用户可能正在 忙于检查源文档，没有盯着屏幕，而是在盲打。如果文员输入错误，用听觉和视觉反馈告知他 ; 以便文员能眼不离文档，用听觉监测输入是否成功。</p>

<p>我们拟议的这种听觉反馈和伴随错误信息框带来的哔哔声是不一样的。实际上，它根本不 是哔哔声。我们提议的反馈错误的听觉提示，其实是无声。当前多数听觉反馈存在一个问题， 那就是普遍认为，负面反馈比正面听觉反馈更合适。</p>

<p>290<br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 15 章防止错误通知决定</p>

<p>避免负面听觉反馈</p>

<p>人们总以用户不喜欢这个理由，来反对听觉反馈。因为计算机发出的声响打扰到用户，用 户不喜欢计算机朝他们发出哔哔声。尽管微软和苹果雇用优秀的设计师，其中包括 Windows 95 的传奇声音设计师布莱恩 • 伊诺 （Brian Eno),
    试图改善警告声音的质量；但是气氛再温暖也 改变不了这个事实：声音就是用来传达负面的、通常很无礼的信息。</p>

<p>情况不妙时发出噪音即为负面听觉反馈。大多数系统里，错误对话框弹出的时候，通常都 会伴随着刺耳的哔哔声，所以听觉反馈才会和哔哔声紧密相关。哔哔声公开表示用户失败了。
    它告诉所有听到声音的人，该用户做了一些蠢事。这种习惯用法让人生厌，所以大多数软件幵 发者都坚定不移地认为，听觉反馈不适用于界面设计，其实这是不合适的。它错得太离谱。呈 现问题的是反馈中的负面，而不是听觉的一面。</p>

<p>负面听觉反馈有几个硬伤。因为负面反馈就像家用警报器一样，发现问题了就会反馈。家用 警报器故意设计得大声、刺耳又烦人，这样才能将那些房子着火、生死相关时仍在安睡的人唤醒。
    不幸的是，用户总是时不时做些错事，让应用软件发出错误信息，于是在用户和应用软件正常的 交流过程中，噪音就成了必不可少的一部分。但在这种正常的关系中，警报声是不必要的；就像
    无意中变道却忘了打灯的时候，我们不希望汽车警报器发出警报声响一样。也许负面听觉反馈 最糟糕的地方是它在人们成功的时候保持沉默。大家都喜欢知道自己哪儿做对了。用户需要知
    道自己哪儿做错了，但不是说他们喜欢听到。负面反馈系统就是不如正面反馈系统受欢迎。</p>

<p>要在有声音和无声音的负面反馈中择其一，人们会选择前者。而要在无声音和声音轻柔、 愉悦的负面反馈中择其一，很多人都会选择后者。我们从来没有在应用中植入高质量、积极的 声音反馈来提供给用户，也难怪人们会把声音和糟糕的界面联系起来。</p>

<p>提供正面声音反馈</p>

<p>在软件世界之外，几乎每一个对象和系统都用声音提示成功而不是失败。关门的时候，听 到咔哒声，表示门已经锁上了，而没有声音则表示还不安全。和别人对话时，对方说 “ 是”或 者 “ 嗯 ”
    ，那么对方至少留意了刚刚所说的。而如果对方沉默，那就有理由怀疑是不是没听到。 拿车钥匙给车打火时，车没有动静，那就是有问题了。触动打印机开关时，打印机冷冷地没有
    动且沉默着，没有嗡嗡作响，那么就有了问题。即便我们认为很安静的设备，也都会制造一些 噪音：打幵炉灶会有咝咝的煤气声，点燃煤气会有令人愉悦的轰轰声。电炉则没那么友好，用
    起来也没那么容易，因为它们不会发出那些声音，而是靠指示灯来显示状态。</p>

<p>成功的时候工具发出声音，称为正面听觉反馈。软件工具大都是沉默的，人们只能听到键 盘的咔哒声。嘿！那就是正面听觉反馈啊。每按下一个键，都会听到轻微但积极的声音。键盘
    制造商能够生产出完全没有声音的键盘，但是他们没这么做，因为人们通常靠听觉反馈来判别</p>

<blockquote>
    291
</blockquote>
<p>自己做得对不对。这是 iPad 等平板电脑的触摸屏键盘默认发出听觉反馈的原因之一。反馈不必 太复杂，咔哒声不需要传递太多信息，但是必须连贯一致 <font size="2">。一</font> 旦发现键盘沉默了，我们就知道
    按键不成功。正面听觉反馈真正的价值，在于没有反馈就已经极其有效地指出了问题。</p>

<p>正面听觉反馈的有效性源自人的敏感度。人都不喜欢被告知自己失败了。错误信息框是负 面反馈，告诉用户犯错了。沉默能确保在没有声音提示情况下，用户也能知道自己做错了。这 是非常有用的，因为软件不必为了达到目的而羞辱用户。</p>

<p>软件应该像键盘一样，给我们发出持续、微弱、听得到的线索。用户操作正确的时候，如 果应用程序能够发出细微但容易辨识的声音，会更加友好易用。每次用户在某一字段里正确输
    入时，应用程序要能发出令人安心的咔哒声；而成功提交一份表单后，要发出一种肯定声音。 如果应用程序不能理解所输入的东西，则应保持沉默，悄悄地告诉用户问题所在，允许用户修正 ,
    而用户不会感到尴尬或者伤自尊。当用户适当地拖曳某一对象时，拖曳成功了则会有轻柔而令人 愉快的砰砰声，而拖曳没有实际意义时则没有声音（并且会看到该对象弹回它原来的位置）。</p>

<p>和视觉反馈一样，电脑游戏往往很擅长运用正面听觉反馈。苹果的 OS X 做得很好，文件 保存和拖、放等动作都会发出轻轻的正面听觉反馈。当然，听觉反馈的声音必须大小适中，与 特定的情境相匹配。 Windows 和 Mac
    都有标准的音量控制，因而为发出有益的听觉反馈扫除了 障碍，但是听觉反馈的声音仍然不能高于电脑上正在播放的音乐。</p>

<p>富视觉非模态反馈是交互设计师手上最强大的工具之一。以精妙而强大的非模态交流取代 恼人又无用的对话框，是能左右用户鄙视这款应用还是喜欢这款应用的重要因素。想一想所有
    能用富视觉非模态反馈及其他非模态反馈机制的方法，以改善应用本身，阻止用户犯错。</p>

<p><span id="filepos0001557890"></span></p>

<p><font size="6">撤销、恢复和可逆的历史操作</font></p>

<p>撤销是一个非比寻常的功能，它能让用户退回到前一步，毫不费劲地改正错误。这个功能 价值显著，理论简单而精妙。然而，如果从目标导向的角度来审査当前撤销的实施和使用，会
    发现目的和方法上存在很大的偏差。撤销对用户是至关重要的，但是它却并不如第一眼看到的 那样简单。</p>

<p><span id="filepos0001558483"></span></p>

<p>撤销应当遵循心理模型</p>

<p>传统观念认为，撤销是遇难用户的救援者，是身着华丽盔甲的骑士，是飞越山脊的骑兵 , 是在危急关头从天而降的超级英雄。作为计算工具而言撤销没什么价值。因为计算机不犯错 , 第 15 章防止错误通知决定</p>

<p>不需要撤销。而人却总是在犯错，撤销是人专用的功能。这个独特的发现立刻告诉我们，在应 用的所有功能中，撤销最不应该按照其构造方法（即模型）来建模，而最应该贴近用户的心理 模型。</p>

<p>人不但会犯错，而且犯错是人们日常行为中的一部分。从计算机的角度来看，一个错误的 开始、一次错误的浏览、暂停、打喷嚏、一些尝试或者发出 “ 嗯 ” 、 “ 你知道吧 ” 等都是犯错。 但从人的角度来看，这些都再正常不过了。人 “ 犯错
    ” 太常见了，如果把它们都当作 “ 错误 ” 或者不正常行为，那么反而会影响软件的设计。</p>

<p><font size="1">“</font> 犯错”的用户心理模型</p>

<p>用户通常不相信自己会犯错，至少是不想相信。换句话说，人物模型典型的心理模型，不 包括自己会犯错这一点。遵循人物模型的心理模型，意味着他不应受到责备。然而，实现模型 建立在 CPU
    无过错的基础之上。遵循实现模型，意味着将过错都归咎于用户。因此，大多数的 软件都假定自己无过错，出现任何问题都完全是用户的错。</p>

<p>解决方案是，用户界面设计师应该抛弃用户会犯错这一观念。这就意味着，用户做的任何 事，都是他们认为正确且正当的。大多数人心里都不愿意承认错误，所以应用在与用户交流的 过程中，也不应该违背这个心态。</p>

<p>撤销让人敢于探索尝试</p>

<p>用户做的任何事情都不会构成一个错误，如果以这个视角去设计软件，我们会立即从不同 的角度看问题，不再把用户当成驱动电脑的代码模块或者外部设备，而是开始把他们当成探索
    家，正在探测未知。众所周知，探索难免撞南墙、进死胡同。人们不断尝试、改变自己的动作、 小心翼翼地探查未知的面纱，看看未知世界的界限在哪里，这都是自然而然的事。不试怎么知
    道所使用的工具到底能做什么呢？当然愿意尝试与否因人而异，但是大多数人是愿意尝试的， 哪怕只有一点点。</p>

<p>开发者获得高额报酬去像计算机一样思考，他们认为这些探索行为是错误的，必须用代码 来处理。从实施模型的角度 —— 也就是开发者的视角来看，这种小心翼翼且无辜的探索就是一 系列持续的 “ 错误 ”
    。而基于用户的心理模型，从人文的角度来看，这些行为自然又正常。应用 要么断然阻止这些可预见的错误，要么协助用户探索。因此，撤销是一个在软件用户界面中协 助探索的主要工具。如果用户改变主意，它能让用户撤回一个或多个先前的动作。</p>

<p>撤销还有一个纯粹心理意义上的重要价值：让用户安心。如果有信心能够随时退出来，那 么人们进入山洞就放心多了。撤销功能就是连接到地表、起慰藉作用的绳梯，保证用户随时都 能从无路可走的洞窟中退出来，从而支撑着用户进一步探索的意愿。</p>

<p align="right" height="2em" width="0pt">293</p>

<p>About Face 4 :交互设计精髓</p>

<p>奇怪的是，通常用户不到用时不会想起这个功能，就像业主在灾难发生之前怎么也想不到 保险单一样。用户通常没有十足准备就冲进一个山洞，只有在遇到麻烦的时候才环顾四周，寻 找绳梯，也就是撤销功能。</p>

<p>设计撤销功能</p>

<p>尽管用户需要撤销，但是撤销功能并未直接支持用户任务背后的具体目标。它只是在实现 真正目标的途中，提供一个必要条件 —— 可信赖。它不能帮助用户实现目标，但能防止意外事 件将用户的努力毁于一旦。</p>

<p>根据情境和用户期望，用户以不同的方式设想撤销功能。计算机初级用户，会把撤销看作 一个无条件的应急开关，能将他从复杂而绝望的灾难中解救出来。经验稍丰富一点的计算机用
    户，会把撤销当作储存已删除数据的工具。逻辑性强、真正理解计算机的用户，可能将撤销看 成过程的堆积，每次可以以相反的次序撤销。要创建一个有效的撤销功能，必须尽可能地满足 我们期望人物模型所能承载的所有心理模式。</p>

<p>成功设计撤销系统的秘诀在于，确保其能够支持常用工具，并且避免（以视觉、听觉或者 文字）暗示用户操作失败。撤销不是一个扭转错误的工具，而是一个帮助探索的工具。错误通
    常是单一、不正确的动作。相反，探索则是一系列探查和步骤，其中一部分可以保留，另一部 分则要摒弃。</p>

<p>撤销最好是整个应用通用的功能，不管是直接操作还是通过对话框，都能撤销前一个动作。 当前，撤销功能在实施中的最大问题之一是，用户保存了文件（例如，在 Excel 中）之后，就
    不能再撤销了。用户保存是为了防止系统崩溃时丢失已经完成的工作，这并不意味着用户想要 确认所有的变更。而且，硬盘驱动器那么大，没理由不把撤销的缓冲区也保存在文件中。</p>

<p>文档中有内嵌对象时，撤销也会存在问题。如果 Word 文档中嵌入了一份电子表格，用户 更改了表格的内容，点击 World 文档，然后启动撤销；但这时撤销的是 Word 中的最近一次动
    作，而不是电子表格里的最近一次动作。这让用户难受了。他们本来认为，文档是一个单一的 整体；这就迫使他们放弃这个心理模型，转而用实现模型来思考：一个文档嵌入另一个文档， 各自有各自的编辑器，各自有各自的撤销缓冲。</p>

<p>撤销的共通类型 — — 尽管撤销是软件中常见的功能，但没有合适的术语可以描述不同类型的撤销功能，只是统 称为撤销而已。语言的缺漏致使无法创造出更新、更好的撤销变体。本节将定义几种撤销变体， 并解释它们之间的区别。</p>

<p align="right" height="1em" width="0pt">第 15 章防止错误通知决定</p>

<p>渐增动作和过程动作</p>

<p>撤销对用户的动作执行操作。典型应用中的典型用户动作通常既包含过程部分（用户做了 什么），又包括数据部分（哪些信息受影响）。当用户请求撤销时，过程部分就会被撤回。数据
    部分引起数据的增加、修改或者删除，如果该动作包含数据部分，那么该数据就会被适当地修 改。剪切、粘贴、拖曳、打字和删除，都是含有数据部分的动作，所以撤销这些动作，其中受
    到影响的文本或者图像，就会被移动或替代。包含数据部分的操作称为渐增动作 （incremental action ) 〇</p>

<p>许多撤销动作是无数据的转换，例如在文字处理软件中修改段落格式，或在画图应用中旋 转图片。两种操作都用在数据上但都没有添加、修改或删除数据（这是从数据库的角度来说的， 可能用户并不认同这个观点）。此类动作（只包含过程部分）称为过程动作
    （procedural action )。 多数现有的撤销功能不会区别对待过程动作和渐增动作，只是单纯地撤销最近的操作。</p>

<p>隐蔽撤销和解释性撤销</p>

<p>正常情况下，撤销由菜单项或者工具栏控件调用，有着固定的标签或图标。用户知道，触 发这一习惯用法可以撤销上一个操作，但并没有迹象指明该操作是什么。这就是隐蔽撤销 （blind undo)
    。另一方面，如果习惯用法里包含了特定操作的文本或视觉描述，那么该撤销就是解释性 撤销 （explanatory undo) 〇</p>

<p>举例来说，如果用户的上一个操作是输入单词 “design” ，菜单上的撤销功能就会显示“撤 销键入 design” 。通常情况下，相对于隐蔽撤销，解释性撤销更讨人喜欢。将解释性说明显示在
    菜单项上很容易，但显示在工具栏控件上就困难多了，不过还可以折中一点，在工具提示里显 示解释（更多有关工具栏和工具提示的内容，详见第 18 章)。</p>

<p>单次撤销和多次撤销</p>

<p>现在常用的撤销功能中，用户最熟悉的两种类型是单次撤销和多次撤销。单次撤销 （single irndo) 是最基本的撤销类型，不分过程操作还是渐增操作，都只撤销用户最近的那一次操作。
    如果单次撤销执行两次，第二次撤销往往会恢复第一次撤销掉的操作，使系统回到第一次撤销 前的状态。</p>

<p>该功能操作简单，非常有效。用户界面基本、清晰、易于描述、记忆方便。用户简直遇到 了免费午餐。这是目前最常实现的撤销，对许多应用来说，即便不是最佳的，也够用了。对有 些用户来说，产品缺少这种简单的撤销功能就足以放弃该产品了。</p>

<p align="right" height="6pt" width="0pt">通常，用户能够立即注意到自己的多数命令错误：做了用户某些动作后感觉或者看上去不
    对，于是停下来评估一下当前的状况。如果错误表现明显，用户看到了自己的错误，会选择撤</p>

<p align="right" height="10pt" width="0pt">295</p>

<p>About Face 4 :交互设计精髓</p>

<p>销功能，返回先前正确的状态，再进行下一步。</p>

<p>多次撤销 （multiple undo) 能连续重复执行。它能撤销多个先前的操作，按先入后出的逆 向时间顺序执行 —— 逆向历史。任何具有简单撤销功能的应用，都必须记住用户的上一个操作 ,
    可能的话，还要缓存被更改了的数据。而如果应用能实现多次撤销，那么它必须保存一堆操作， 包括用户可能在高级偏好中设置的深度操作。每一次调用撤销，都会执行一次渐增撤销，即撤
    销最近的那次操作，必要时替换或者删除数据，并从堆栈中删除已存操作。</p>

<p>单次撤销的局限性</p>

<p>如果用户不小心覆盖了可以拯救他的撤销功能，单次撤销功能最大的局限性就出现了。问 题出现时用户不能立即意识到错误。举例来说，假设用户先删除了文本中 6 个段落，又删除了 1 个单词，然后才知道那 6
    个段落是误删，应该放回原处。不幸的是，现在使用撤销功能只能 恢复那 1 个单词，而 6 个段落已经永久丢失了。之所以会失败就是因为撤销功能过于机械化， 不切实际。谁都知道 6 个段落比 1
    个单词重要，但是应用却自作主张地抛弃了段落，留下了一 个单词。应用过于盲目，它扔了 50 美元却保留了 25 美分，仅仅是因为那 25 美分后拿到。</p>

<p>某些应用中，只要点击一下鼠标，不管引发调用的功能多么无辜，都会让单次撤销功能忘 记用户上一个有实际意义的操作。尽管多次撤销能解决这些问题，但也存在某些重大问题。</p>

<p>多次撤销的局限性</p>

<p>克服单次撤销劣势的方法，是使同样的渐增撤销能够多次实现。应用保存用户每一步操作。 当用户重复选择撤销时，依次撤销每一步，其顺序与原来调用这些操作时正好相反。在前一节
    举的例子中，用户第一次调用撤销功能，恢复删除的那一个单词，而第二次调用撤销则恢复在 删除单词之前删除的 6 个段落。重新删除那一个单词的冗余操作就是为恢复 6 个有价值的段落
    所付出的代价。重复删除那一个单词的代价可以忽略不计，就像忽略救护车在途中所花费的代 价一样：生命垂危的时候不能纠结鸡毛蒜皮。但是这仍然不能改变一个事实，那就是撤销机制 建立在错误的模型上。换作其他的情况，严格按照后进先出（
    LIFO) 的顺序执行撤销，会让治 病和患病一样痛苦。</p>

<p>再假设用户删除了文本中的 6 个段落，调用另一个文档，然后使用了全局查找替换功能。 用户要想恢复已删除的 6 个段落，必须首先撤销查找替换，这个操作没有意义，而且查找替换
    本身已经很复杂。这时候介入的操作不再是上一个例子中删除单个词汇那样无关紧要的事了， 而是变得复杂又困难，要撤销它显然让人很不愉快。如果能够选择撤销队列中的那个操作，不 动后来介入的有效操作，那就好多了。</p>

<p>多次撤销的问题并不是由其行为引起的，更多地是由呈现引发的。多数撤销都是毫不妥协</p>

<p align="right" height="0pt" width="0pt">第 15 章防止错误通知决定</p>

<p>地以功能为中心建立起来的。它们按一个接一个的功能来记忆用户的动作，把动作分成单个功 能。撤销系统按照实现模型建立表现模型，这是一个由来已久的方法，它模拟代码和数据结构，
    而不是用户的目标。每点击一次撤销键，恢复一个功能大小的先前操作行为。以一个接一个功 能为基础来撤销的心理模式，适于解决大多数因用户输入错误而引起的简单问题。通常用户进
    行了两、三步操作之后，立即发现问题，立即予以修正。但是问题一旦复杂，渐增的多次撤销 模式就不能恰如其分地解决问题了。</p>

<blockquote>
    撤销和恢复
</blockquote>
<p>撤销的实现模型导致恢复功能的出现。在撤销的实现模型中，撤销的步骤必须与操作的步 骤相反，且必须先撤销所有介入的正确操作，才能撤销想要撤销的步骤。恢复本质上是取消所
    进行的撤销，只要开发者努力实现了撤销功能，那么恢复功能的实现就很容易了。</p>

<p>在多次撤销中，恢复能避免出现糟糕的情形。如果用户想要撤销一系列操作，就多次点击 撤销控件，等待恢复到理想的状态。这种情况下，点击撤销键的次数很容易过多。用户能立即
    看到撤销了一些想要的结果。恢复通过取消前一个撤销行为，将之前理想的操作放回原处，从 而解决了这个问题。</p>

<p>许多采用单次撤销的应用，把上一次撤销动作当作一个可撤销的动作。实际上，这样第二 次调用撤销功能相当于一个小小的恢复功能。</p>

<blockquote>
    分组多次撤销
</blockquote>
<p>微软 Word 有一种很不幸地已成为典型的功能，即多次撤销的一个变体，我们称之为分组 多次撤销。它分为不同的层次，在撤销堆栈里的每一步操作都添加了文本描述。可以查看已执
    行操作的列表，选择表中某一个操作进行撤销。但是不能直接撤销某一步操作，而是要把到该 步的所有步骤一起撤销（如图 15-4 所示 ) 。 Adobe 的很多产品中也采用了这种分组多次撤销的</p>

<p>方式。</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00015.jpg"/></p>

<p>undo Actions pt at understanding and rtunity. and at introducing and positicmleig a it market, their input into the
    product dcsian</p>

<p><br/>
    <br/></p>

<blockquote>
    <font size="2">图</font> 15-4 <font size="2">运用微软</font> Office <font size="2">的撤销或恢复功能，可以撤销多个动作，但是只能组合起来一起撤销，不能只撤销其中某一步。
    恢复功能也同样。</font>
</blockquote>
<blockquote>
    297<br/>
    <br/>
</blockquote>
<p>About Face 4 :交互设计精髓</p>

<p>因此，只有撤销所有介入操作，才能恢复丢失的 6 个段落。选择一个或多个操作，进行撤 销以后，已撤销的操作会在恢复控件里以倒序列出来。恢复和撤销的方式完全一样。用户想要
    恢复多少个操作，就可以选择多少个，想要恢复的特定操作之前的所有操作也都会一起恢复。</p>

<p>应用为这一功能提供了两个视觉提示。如果用户选择了列表中的第 5 项，那么该项和列表 中的前 4 项都被选中，同时，文本显示 “5 操作撤销 ” 。设计者不得不添加文本说明，这一事实
    表明，无论开发者运用何种实现模型，用户都会采用完全不同的心理模型。用户认为可以移到 列表的下方，从后面选择单个操作来撤销。应用不支持这个选择，所以才显示说明。就像有拉 手的门上，尽管贴着 “ 推 ”
    的标志，人们还是会拉。尽管多次撤销是一个非常有用的机制，但 没有理由不运用丰富的计算资源，实现可选撤销，让用户只撤销那些不想要的操作，而不是撤 销所有之后完成的操作。</p>

<p><span id="filepos0001584542"></span></p>

<p>撤销的其他类型</p>

<p>单次撤销是最简单的撤销形式，它符合用户的心理模型，即 “ 我刚刚做了一些事，现在我 希望没做过这些事。我想点击一下按钮，撤销我之前做的最后一件事。 ” 不幸的是，随着情况愈
    加复杂，该呈现模型迅速与用户心理模型背道而驰。本节将讨论几种撤销行为，它们与标准化 的撤销和恢复惯例有点不同。</p>

<p>不连续的多次撤销</p>

<p>当用户走进逻辑思维的死胡同（而不仅仅是输错了数据），通常会执行几步复杂的操作，结 果进入了未知领域 • ，然后用户意识到自己迷路了，需要找到领土的已知方位。这时，他可能己
    经执行了几种交叉功能，其中只有几个是不需要的。用户可能会保留一些操作，取消其他的， 但不一定严格按照倒序执行。如果用户输入了一些文字并编辑然后决定撤销输入的文字，而不
    撤销对文字的编辑，可以这样做吗？这样的操作实现起来有问题，也不好解释。尼尔•鲁宾金 (Neil Rubenking) 举了这么一个破坏性的例子：假设用户进行了全局替换，第一步将 “tragedy” 替换成 “catastrophe”
    ，然后将 “cat” 替换成 “dog” 。要撤销第一步保留第二步，应用能有效地 修正所有的 “dogastrophe” 吗？</p>

<p>在这种更复杂的情境中，撤销已经不能像在简单情境中那样简单地呈现为 LIFO 桟了。用 户也许会把自己的操作看成菜单，可以不按顺序，挑选几个予以撤销，剩下的保留。这需要解
    释性撤销功能，所釆用的呈现模型要比普通的隐蔽多次撤销所必需的模型更加强大。此外，从 这样的呈现模型中进行选择的机制必然更复杂。在队列中呈现操作，告诉用户他实际上正在撤 销什么则是一个更加棘手的问题。</p>

<p>298<br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 15 章防止错误通知决定</p>

<p>分类撤销</p>

<p>退格键实际上就是一种撤销功能，只不过是一个特别的撤销功能。当用户输入错误的时候， 退格键会 “ 撤销 ” 错误的字母。如果用户输错了一些字母之后，又执行了一些不相关的功能，
    例如修改段落格式后再重复按退格键，输错的字母也会被删除，而格式修改就被忽略了。它能 让用户在任意位置不连续地撤销，这可以是一个非凡而灵活的优势，当然这取决于用户的看法。
    你可以认为它是给用户设的一个陷阱，因为用户能移动光标不经意地删除任何字母，而这个字 母可能不是最后键入的。</p>

<p>从逻辑上来说，后者是一个问题。但根据经验，它对用户来说几乎不成问题。这种不连续 的渐增撤销，是很难用文字解释的，它用起来自然又简单，因为一切都是可见的，用户能清楚
    地看见自己将要删除什么。退格键是渐增撤销的经典例子，它只撤销数据，忽略其他介入的操 作。然而，假设撤销功能也有一个指针，能够移动，能够撤销指针所指向位置的最后一个；你
    可能会觉得这样很难管理，会让普通用户产生混乱。经验告诉我们，退格键一点儿都不会让人 混乱。它表现得很好，因为它的行为和用户移动光标的心理模型是一致的。光标的位置是新增 字母的地方，也理所当然的是能删除字母的地方。</p>

<p>但是，退格键毕竟只是个特例。但以此概念为跳板，或许能够创建不同类型的渐增撤销， 如格式撤销功能，它能撤销先前的格式命令和其他类型的分类撤销（ category-specific Undo )。
    如果用户先输入一些文本，改成斜体，又输入一些文本，增加段落缩进，再输入一些文本，最 后点击格式撤销按钮，这时候只能撤销所增加的段落缩进。再次点击格式撤销按钮会撤销斜体。 任何调用撤销格式的操作都不会影响文本的内容。</p>

<p>在非文本应用中，分类撤销的意义是什么呢？例如，在绘图应用中，颜料应用工具、变换 和剪切 - 粘贴，都有单独的撤销命令。没理由不给每个特定的操作类型设计单独的撤销功能。</p>

<p>颜料应用工具包括铅笔、钢笔、填充、喷头、刷子等所有绘图工具，以及直角、直线、椭 圆、箭头等所有形状工具。变换包括剪切、锐化、调色、旋转、对比度和线宽等所有图像处理 工具。剪切 -
    粘贴工具包括所有套索、选取框、复制、拖放和其他调整位置的工具。和字处理 软件中的退格键功能不同，在画图应用中撤销颜料应用工具是按时间顺序撤销的，独立于选
    择操作。也就是说，不论当前选择的是什么，首先移除的颜料是最后一次使用的。西方文本 默认从左上往右下的顺序阅读，这符合强大的固有心理模型，因此看上去很自然。但在画图应
    用中，并不存在这样的常规顺序，除了基于输入顺序的删除，任何其他删除顺序都会让用户感 到很迷惑。</p>

<p>好一点的办法是只在当前选择区域内撤销。例如，用户选择了一个图形对象，请求撤销一 次变换。应用到所选对象 （selected object) 上的最后变化就会被撤销了。</p>

<blockquote>
    299
</blockquote>
<p>大多数软件用户都熟悉渐增撤销，会觉得分类撤销很新颖，也可能很烦人。不过，退格键 的普遍使用说明了渐增撤销是习惯行为，用户觉得很实用。如果有模态撤销工具的应用越来越
    多，用户很快就会适应，甚至还会期待，就像期待在字处理软件中找到退格键一样。</p>

<p>已删除的数据缓冲区</p>

<p>如果用户长时间处理文档，可能会想要一个储存已删除文本的仓库。仍以上文中丢失的 6 个段落为例，如果经过几个复杂的查找替换后，它们从用户手中脱离了，那么要通过撤销功能 来恢复这些段落，会和重新输入一遍一样困难。用户会想： “
    如果应用记住了我删除的东西，并 将它们保存在一个特别的地方，那么我就可以直接去拿我想要的东西了 。”</p>

<p>用户想要的不只是一个 LIFO 功能栈 —— 已删除的数据缓冲区，而是一个将动作的数据部 分存储起来的仓库。不论文本时用什么方式处理掉的，用户只想要恢复丢失的文本。通常的清 单模型 （manifest model)
    不仅强迫用户知道每个中间步骤，还要求用户依次撤销它们。要创建 一个对用户更加友好的功能，除了常见的撤销栈，还可以创建一个独立的缓冲区，收集所有删 除了的文本或数据。任何时候，用户都能像打开文档一样，打开这个缓冲区；然后按照习惯用
    法，使用剪切 - 粘贴或者点击 - 拖放，来查看和恢复想要的文本。如果在这个缓冲区中每一条的 前面都标上简单的时间戳和文档名称，导航就简单明了了。</p>

<p>然后用户就能随机浏览已删除数据缓冲区了，不需要按照一定的顺序。找到那丢失的 6 个 段落就简单了，过程也可视化了，而不论用户进行了多少复杂的介入步骤。已删除数据缓冲区
    是对常规的渐增撤销和多次撤销的补充。不管怎么样，数据必须保存在缓冲区里。相对来说， 这个特性对于大多数应用都是十分有用的，无论是电子表单、绘图应用还是发票生成器。</p>

<p>版本控制和还原</p>

<p>用户偶尔会后退很长一段距离，这么做时，粒度动作并不是很重要。只是仍然需要渐增 撤销，但是在大多数情况下，从执行过的大量操作中找出单独的组成部分有点小题大做。版 本控制（第 14
    章中已经讨论过）直接复制了整个文档，就像照相机快照及时捕捉画面一样。 版本控制涉及整篇文档，通常直接使用文件系统实现。版本控制和其他撤销系统的最大区别 是，用户必须明确要求版本控制 ——
    记录下文档的一份副本或者快照。只有这样做，用户才能 安全地修改原件。如果用户之后觉得修改并不理想，可以使用保存的副本，也就是文档先前的 版本。</p>

<p>许多现有工具都支持源代码的版本控制，但是这个概念刚刚进入软件开发之外的世界。例 如， 37signal 出品的 Writeboard ( 如图 15-5 所示）可自动创建协作文本文档的不同版本，允许
    用户对比各个版本，当然也能返回到任一先前的版本。</p>

<p><img align="baseline" alt="" height="151" src="../Images/Image00252.jpg" width="186"/></p>

<p><img align="baseline" alt="" height="89" src="../Images/Image00219.jpg" width="140"/></p>

<p><img align="baseline" alt="" height="62" src="../Images/Image00278.jpg" width="53"/></p>

<p>第 15 章防止错误通知决定</p>

<p>. <font size="1">010</font> . <font size="1">0</font> .. <font size="1">一</font> … <font size="1">一</font> ,
    AF4_Plan_AII_for_GDrrve</p>

<p><i>imi m&amp;t</i> <font size="1">37 a</font></p>

<blockquote>
    <font size="1"><i>$</i></font> ，卷泰 <font size="1">：</font>
</blockquote>

<p><font size="2"><s>Biiilii</s></font> i <font size="2"><s>liiiii—</s></font> 11 CoteftiWt up vtrtion <i>ot</i> the 3
    ideally an eitimtfsie from a modern ap0ficatior)/ <i>currt</i> <i>7</i> Cotorir«dl #ml HMfitd up vmkm of H»«</p>

<blockquote>
    <font size="1">13 Cotorued and sprfW up</font> <font size="1"><i>ymr^on</i></font> <font size="1">ol the wasting
    figure.</font>
</blockquote>
<blockquote>
    <font size="1">22 Cotortzed and spiffed up version 〇# the existing ficur*.</font>
</blockquote>
<p><font size="1"><i>2-2</i></font> <font size="1">24 id«aly</font> <font size="1"><i>t\</i></font> <font size="1">mmpte
    from a Ubltt photo</font> <font size="1"><i>9pp.</i></font></p>

<p><font size="1">1-4</font> <font size="1"><i>2S</i></font> <font size="1">Cotertzetf a»^ sprffed up version</font>
    <font size="1"><i>ot</i></font> <font size="1">the cxistinc fifwrt.</font></p>

<p><font size="1">1-5</font> <font size="1"><i>29 CotorUHS</i></font> <font size="1">and spiffed up v«rtky&gt; o#
    th#</font> <font size="1"><i>n$ut€.</i></font></p>

<p>麵關__:丨</p>

<blockquote>
    <font size="1">1». 5 09 PM PT</font>
</blockquote>

<p><font size="1">from a modern ap0ficatior)/</font> <font size="1"><i>entrant</i></font> <font size="1">OS. Maybe 3
    e*iamp&lt;«^,</font> <font size="1"><i>tSe^kiOfi,</i></font> <font size="1">mob* up v#r»lorioftf»«MMni%ur».</font>
</p>

<p><font size="1">TBO * (Stp« or Novt&gt;melr«m«) TBO • (Sept or Nov!?mefram«)</font></p>

<p><font size="1">Jirf 5 06 PM PT</font></p>

<p><font size="1">•JamMLwtorK</font></p>

<p><font size="1">Jut 19. 2 4« PM PT</font></p>

<p><font size="1">ttOS^Owai</font></p>

<p><font size="1">Ju» 2 49 PM PT Jui 19. 2:26 PM PT</font></p>

<p align="center" height="0pt" width="0pt"><font size="1">UKMiwie</font></p>

<p><font size="1">名.</font></p>

<p><font size="1"><i>M</i></font> <font size="1">19, 222 PM PT</font></p>

<p><i>mQ^Qs^m</i></p>

<p><font size="1"><i>M</i></font> <font size="1">1^, &gt; PM PT</font></p>

<p><font size="1">Jul 1ft, 2:1^ PM PT</font></p>

<table align="center" valign="top">
    <tr valign="top">
        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p align="center" height="0pt" width="0pt"><font size="1">&nbsp;</font> <font size="1">s</font></p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p align="right" height="0pt" width="0pt"><font size="1">&nbsp;</font> <font size="1">4-2</font> <font
                    size="1"><i>XO^H</i></font></p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p height="0pt" width="0pt"><font size="5">TBO&nbsp;</font></p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p><font size="1">&nbsp;</font> <font size="1">TBD • or</font></p>
        </td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p align="center" height="0pt" width="0pt"><font size="1">&nbsp;</font> <font size="1">6</font></p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p><font size="1">&nbsp;</font> <font size="1">TBO * or N&lt;w t»i^#ram#)</font></p>
        </td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p align="center" height="0pt" width="0pt"><font size="1">&nbsp;</font> <font size="1"><i>7</i></font></p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p>&nbsp;&nbsp;</p>
        </td>

        <td bgcolor="#FFF" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span>

            <p><font size="1">&nbsp;</font> <font size="1">TBO - (Sept or Hov</font></p>
        </td>
    </tr>
</table>

<p>K of FMbook mobAt app A ovcrliy,</p>

<p><br/>
    <br/></p>

<p><i>m^tivmiUKb</i> <font size="1">Jui 19. 2：n</font></p>

<p><font size="1">&gt; ^：iepMp</font></p>

<p><font size="1">wUwaewie</font></p>

<p><font size="1">rigufM &lt;«rAT4</font></p>

<p><font size="1">KMrchdn〇es * imm tf*t*a*d m</font> <font size="2">图</font> 15-5 <font size="2">谷歌文档能让多个人协作同一个文档。每次用户保存对文档的修改，它都会创建一个新的版本，用户也能看到</font>
</p>

<p><font size="2">不同的版本。这样，合作的时候，就不必担心有价值的工作被覆盖，这是非常有用的。</font></p>

<p>版本控制功能有效与否关键在于还原命令的行为。版本控制应该提供一份所有已保存文档 版本的清单，其中包括每个文档的部分信息，如记录文档的时间和日期、记录人姓名、文档大
    小及其他用户选择输入的备注。用户应该能理解不同版本之间的区别，最终选择还原其中任何 一个版本。还原的时候，文档当前状态应当作为另一个版本保存下来，以便能够还原。</p>

<p>冻结</p>

<p>冻结（ freezing) 会锁住文档中选中的数据，使之不被更改。已经输入的任何东西，都不能 再编辑，但可以添加新的数据。已存在的段落不能变动，但新的段落可以添加到已存在的段落 中间。</p>

<p>这个习惯用法在图形文档中比在文本文档中更有用，就像艺术家用定影剂喷绘作品一样。 所有做好的标记都已经固定了，但是可以添加新的标记。已经出现在屏幕上的图像被锁定了， 不能再改变，但是新的图像能够自由地覆盖到已经存在的图像上 。Corel
    Painter 的 Wet Paint 和 Dry Paint 命令也有类似的特性。</p>

<p>301</p>

<p><br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <span id="filepos0001610395"></span></p>

<p>撤销可撤销的</p>

<p>有些操作不能撤销，因为它涉及的某些动作会触动不在应用程序直接控制下的设备。例如 , 电子邮件发送以后，就不能撤销。（ Gmail 在用户点击发送之后几秒内，并未真正将邮件发送出 去，就给了用户少量时间来中止发送，这个做法太聪明了。如图
    15-6 所示)。</p>

<p align="center" height="0pt" width="0pt"><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00368.jpg"/></p>

<p>图15-6 Gmail在用户点击发送之后，隔几秒再发送邮件，让用户能够临时撤销可以撤销的操作。</p>

<p><br/>
    <br/></p>

<p>为什么不提供一个 “ 撤销 ” 的文件名呢？因为这不符合对 “ 撤销 ” 功能的传统看法。开发 者一般不会为更改文件名提供一个真正的撤销功能。</p>

<p>还有些情况下，我们被告知不能撤销一个动作，因为受到商业规则或者机构政策的限制， 包括金融交易的记录、医疗图标的条目。在这些情况下，撤销很可能不是一个合适的功能，但
    是仍然提供可以让用户能够撤销或者更改的途径，但要留下审计痕迹，从而更好地支持用户的 目标和心理模型。</p>

<p>花一些时间仔细看看自己的应用，看看有没有一些功能，看似应该可以撤销，但当前却没 有实现。你或许会意外地发现竟然有很多。</p>

<p><span id="filepos0001612704"></span></p>

<p><font size="6">假设：对比和预览</font></p>

<p>除了能支持一定时间里的迟疑之外，撤销和恢复功能还是一个很方便的对比工具。假如你 想要对比一下不规则的右边距和两端对齐的右边距的视觉效果。那么可以调用撤销看看不规则
    的右边距，然后用恢复看看两端对齐后的边距。实际上，撤销和恢复之间的切换，实现了对比 或者假设分析（ what-if) 功能，碰巧以其呈现模型的形式表现出来。如果将同样的功能按照用
    户的心理模型添加到界面上，该功能可能会呈现为对比或者假设分析控件（ what-ifcontrol )。该 功能能让用户先比较几种状态，再确认。</p>

<p align="right" height="0pt" width="0pt">第 15 章防止错误通知决定</p>

<p>有些电视机的遥控器有一个 “ 返回 ” （ jump) 按钮，能在当前看的频道和之前看的频道之 间切换，同时看两个节目的时候会非常方便。返回功能用一个命令提供了与撤销-恢复相同的功 能，让同一个功能减少了一半的附加操作（见第 12
    章）。</p>

<p>用于对比时，撤销和恢复实际上是一个功能，而不是两个：一个是 “ 应用更改”，另一个是 “ 不要应用更改 ” 。也许一个单一的对比按钮能够向用户更加精确地展现这个动作。虽然我们一
    直是在以文本为主的文档处理应用中谈到对比功能，但在图像处理或者绘图应用中，该功能可 能更有用，用户会在这些应用中执行连续的视觉变换。能看到变换过的图像（甚至同时看多种 变化 )
    ，并简便快速地与未转换之前的图像做对比，这对数字艺术家来说作用太大了。许多产品 通过缩略图 “ 预览 ” 图像来解决这个问题，如图 15-7 所示。</p>

<p align="center" height="2em" width="0pt"><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00345.jpg"/></p>

<p>图15-7 iPad上有很多照片处理软件，包括Photo Toaster，都能预览正在处理图像的缩略图，每一个都显示了添加不 同效果或者改变图像参数后的样子。轻轻点击缩略图就能把变化应用到图像上，而图像本身也是一种预览，因为再点击
    一下就能撤销。</p>

<p><br/>
    <br/></p>

<p>对比可能是高级功能，对某些应用来说确实如此。正如大多数看电视的人不会使用返回功 能一样，只有常用对比按钮的人才觉得此功能好。但这并不能贬低它的实用性。对于照片处理
    和其他媒体编辑应用来说，视觉对比工具能在操作实现之前看看操作前后的效果，几乎已经成 为了一个必需品。</p>

<p align="right" height="9pt" width="0pt">303</p>

<p><span id="filepos0001616941"></span></p>

<p align="right" height="0pt" width="0pt"><font size="7">为不同的需求而设计</font></p>

<blockquote>
    正如第一部分所谈到的，人物模型和场景有助于将设计工作重点放在实际 用户的目标、行为、需求和心理模型上。除了人物模型能让设计工作抓住重点 外，一些持续性的可概括的用户需求模型也能告诉我们应该如何设计产品。本
    章将探讨满足一些广为人知的需求所需的策略：易学性（leamability )和帮助 (help )、可定制性(customizability )、本地化（localization )和全球化(globalization )，
    以及无障碍性（accessibility )〇
</blockquote>
<p><span id="filepos0001617901"></span></p>

<p><font size="6">易学性和帮助</font></p>

<p>不同经验水平的用户在学习一个界面时，两个概念对于整理出他们的需求特别有用：命令 模态 （command modality) 和有效特性工作集 （working set) 。这些不够的话，备选方案是各种
    形式的在线帮助。本节逐一论述帮助用户理解和学习界面的各种方法。</p>

<p><span id="filepos0001618545"></span></p>

<p>命令模态</p>

<p>简单来说，用户界面是用户向计算机输入数据和发布命令的方法。数据输入通常相当直接 : 向语音识别算法口述、在空白页或文本框打字、用手指或触笔去画、点击和拖曳对象，或者从
    菜单或类似的小工具中选择一个值。激活功能的命令要难学一点，因为用户既要知道哪些命令 可以使用，又要搞清如何使用这些命令。</p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p align="right" height="1em" width="0pt">命令模态是让用户将这些指令发给应用的特殊技术。直接操作柄（ direct-manipulation handle)
    、下拉菜单和弹出菜单项、工具栏控件以及快捷键 （keyboard accelerator )等都是命令</p>

<p>模态。</p>

<p>对于菜单项、工具栏项目、快捷键、手势或者直接操作控件等重要功能，体贴的用户界面 往往会提供多重命令模态 （multiple command modality) ，每个都能调用一个单独的特定命令。
    这种冗余可以让拥有不同技能和天资的用户根据个人能力和喜好来操作应用了。移动应用不能 承载那么多的命令模态，代价是在寻找特定功能时，可搜索的界面元素也少。</p>

<p>教学式命令、直接命令和隐形命令</p>

<p>有些命令模态会给新用户提供更多帮助。对话框和命令菜单（如传统桌面应用程序的菜单 栏中的命令，如图 16-1 所示）用描述性文本教会用户如何使用。所以以这种方式呈现的命令被 称为教学式模态 （pedagogic modality)
    ，这些命令以查看的方式来讲授自己的行为。初学者使用 菜单的教学式行为学会使用新应用。但是中级用户总想撇开菜单，找到更加直接有效的工具， 这些工具是直接命令 （immediate command) 和隐形命令 （invisible
    command )。</p>

<table valign="top">
    <tr valign="top">
        <td bgcolor="#FFF" colspan="2" valign="top">
            <span bgcolor="#FFFFFF">&nbsp;</span> &nbsp;

            <blockquote>
                <font size="2">9 Edit View Window Help</font>
            </blockquote>

            <blockquote>
                <font size="2">Qpen^.</font>
            </blockquote>

            <p><font size="2">Ctrl+O</font></p>

            <blockquote>
                <font size="2">Qeate PDF Online...</font>
            </blockquote>

            <blockquote>
                <font size="2">Savers</font>
            </blockquote>

            <p align="right" height="0pt" width="0pt"><font size="2">►</font></p>

            <p><font size="2">Qi Send and Track Files Online</font></p><br/>
            <br/>

            <blockquote>
                <font size="2">Attach to Email...</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">Get Documents Signed^.</font>
            </blockquote>

            <blockquote>
                Dose
            </blockquote>

            <p>Ctri+W</p>

            <blockquote>
                Properties …
            </blockquote>

            <p>Ctrl+D</p>

            <p>^ £rint»</p>

            <p>Ctrl+P</p>

            <blockquote>
                <font size="2">IWA2010 Reimann R Fo.^etum As Filed.pdf</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">2 C：-\2010 Reimann R Fo...etum As Filed.pdf</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">1 C^.\2011 Reimann R Fo~. Retum_Filing.pdf</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">4 C:\UsersV~\2011 Reimann R Tax Retum.pdf</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">5 C:\UsersU\2010 Fed and MA Taxes.pdf</font>
            </blockquote>
            <br/>
            <br/>

            <blockquote>
                <font size="2">Exit</font>
            </blockquote>

            <p><font size="2">Ctrl.Q</font></p><br/>
            <br/>
        </td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" colspan="2" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" colspan="2" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>

        <td bgcolor="#FFF" valign="top"><span bgcolor="#FFFFFF">&nbsp;&nbsp;</span></td>
    </tr>
</table>

<p><br/>
    <br/></p>

<blockquote>
    <font size="2">图</font> 16»1 Windows <font size="2">版</font> Adobe Reader <font size="2">的菜单给用户提供了应用程序功能的文本概述，显示热键和快捷键，提供了工具
    栏图标。不幸的是，由于空间有限，移动应用很少采用教学式惯用法。</font>
</blockquote>
<p>表达直接模态 （immediate modality) 的命令有：直接操作控件如拖放处理、实时操控控件 如滑块和旋钮、甚至普通按钮及各种工具栏变体。即时模态在数据（或者数据的表现形式）上
    生效，不需要中间步骤。不论是菜单还是对话框，都没有这种即时属性。二者都需要一个中间 步骤，有时候甚至不止一步。</p>

<p align="right" height="9pt" width="0pt">305<br/>
    <br/></p>

<p>About Face 4 :交互设计精髓</p>

<p>快捷键和手势进一步拓展了这个创意：可视界面上不显示这些命令，只有隐形的按键、滑 动、挤捏或者轻弹手指。这种类型的命令界面则属于隐形模态 （invisible modality )。用户必须记
    住隐形命令，因为通常界面上没有或者只有少许提示这些命令的存在。隐形命令还要一幵始就向 用户标示出来，除非它们遵循广泛使用的惯例（例如在触屏上上下滑动来滚动界面），或者通过
    可靠的途径告知新用户存在这些命令。隐形命令广为中级用户设置，更多地为高级用户所用。</p>

<p>现实中的信息和头脑中的信息</p>

<p>唐纳德 • 诺曼提供了一个关于命令模态的实用观点。在《设计心理学》（ 77^ 〇 /</p>

<p>五 77H&gt;zgd — 书中，诺曼用现实中的信息和头脑中的信息这两个词，来指代用户获取信 息的两种不同的方式。</p>

<p>诺曼所谈论的现实中的信息，是指环境或者界面中信息提供不充分，不足以完成某些事情。 例如，挂着商业中心地图的电话亭就是现实中的信息。人们不用记住泛美金字塔 （tmnsamerica pyramid)
    的确切位置，因为查阅地图就能找到它。</p>

<p>相对应，头脑中的信息，即你已经学会或者记住的信息，就像街头小巷的近道，任何地图 都是不会标出来的。</p>

<p>头脑中的信息比现实中的信息更易用，也更快，但前提是得确保己学了，未忘且最新。现 实中的信息虽更慢、更麻烦，但是非常可靠。</p>

<p>教学式命令旨在通过现实中的信息来学会。而隐形命令必须记住，因此属于头脑中的信息。 直接命令则介于二者之间。</p>

<p>菜单项或者对话框属于教学式命令，是因为它们必然充满了上下文信息。而快捷键是隐形 命令，因为需要用户记住其功能及对应按键，可能不会在可视界面上显示出来。</p>

<p>记忆矢量</p>

<p>新用户喜欢教学式命令，但是当他们进步为中级用户，缓慢、重复、冗长的教学式界面似 乎幵始变得乏味了。用户想要找到更多直接命令来完成常用任务。这种期望很自然也很恰当，
    而且，软件要想做到易用，就必须满足用户的这种期望。解决方案分成两步：首先，除了教学 式命令之外，还必须提供直接（或者隐形）命令；其次，必须提供一个途径，让用户学会每个 教学式命令相对应的直接命令。这种途径称为记忆矢量
    （memorization vector )。</p>

<p>给用户提供记忆矢量的方式有好几种。效果最差的是仅在用户文档中提一下。稍好一点的， 是在应用的主在线帮助系统里提到，不过这个方法仍然效果不佳。这些方法要麻烦用户去寻找 记忆矢量，而且是让用户自己意识到需要自己先寻找记忆矢量。</p>

<p>306</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00022.jpg"/></p>

<p>第 16 章为不同的需求而设计</p>

<p>再好一点的方式是把记忆途径直接集成到主界面。大多数桌面应用的菜单已经有了两种标 准的方法。正如微软定义的，典型的 Windows 应用在键盘上都有两套基于键盘的直接命令： 热键（ mnemonic) 和快捷键（
    accelerator) 。例如，在微软 Word 中， “ 保存 ” 的热键是按 Alt+F 键，再按 S 键。 Alt+F 键导航到文件菜单， S 键下达保存命令。用户按下 Alt 键的时候 ，Windows
    中的记忆矢量热键就显示出来。相应字母标了下画线，或者如 Office 套件中的那样显示模态工 具提示（如图 16-2 所示）。用户接着按下适当的键执行命令，或者再按一次 Alt 键隐藏提示。</p>

<p>ferences Review vl</p>

<p>SO Units</p>

<p align="right" height="0pt" width="0pt">Detach</p>

<p align="right" height="0pt" width="0pt">Copy</p>

<p>3 Galley</p>

<p>Paste</p>

<p height="0pt" width="0pt"><font size="5">J</font></p>

<p>Painter</p>

<p>WileySD</p>

<p>Clipboard</p>

<p>Replace 4 Select - Editing</p>

<p>»c Small Caps</p>

<p>Formats</p>

<p align="right" height="0pt" width="0pt">766576 &lt;</p>

<p>Styles 3 1 Show Style Arc All Styles Navigation</p>

<p>Search Document</p>

<p>r ea I ss i as 1</p>

<p>Make the selected text bold.</p>

<p>Norman refers to situations</p>

<p><font size="2">图</font> <font size="6">16-2</font> <font size="2">在微软</font> <font size="6">Office</font> <font
        size="2">套件应用中，按下</font> <font size="6">Alt</font> <font size="2">键后，会有小小的弹出框显示热键，有工具提示框显示快捷键，因为标准
    界面被类似于工具栏的</font> <font size="6">Ribbon</font> <font size="2">用户界面取代了。</font></p>

<p>“ 保存 ” 的快捷键是 Ctrl+S (Mac 上是 Cmd+S) 。快捷键明确备注在菜单项的右侧，这就是 记忆矢 M 。如图 16-1 所示 ，Adobe Reader 在这一步上走得更远，把工具栏命令的图标放在了相
    应菜单命令的左侧。而微软则在其 Office 套件应用程序的 Ribbon 用户界面中，将快捷键作为控 件工具提示的一部分显示出来（如图 16-2 所示)。</p>

<p>Mac 应用一般不支持热键，但是有快捷键和选项板（ palette), 或者工具栏图标映射 （toolbar icon mapping) 〇</p>

<p>任何记忆矢量都不会主动打扰新用户。新用户可能使用了应用软件一段时间后，直到成了 中级用户，才会发现这些记忆矢量。最终，用户是会注意到这些视觉提示的，开始琢磨它们的
    含义。大多数智力正常的人，也就是大多数的用户，不需要帮助都能理解快捷键，而热键则稍 微难点。但是一旦用户了解了 Alt 键的使用方法，不论是经过指导还是偶然发现的，这种习惯 用法只要出现，就很容易记住并使用。</p>

<p>值得注意的是，移动操作系统常见的记忆矢量，可能是因为没有 “ 闲置”空间或者复合交 互 （compound interaction)( 见第 13 章）来放置这些信号。移动操作系统上与记忆矢量最类似
    的是用户初次使用设备或应用时演示的首次运行导览（见下文）和教程。随着移动平台的成熟，</p>

<p>307</p>

<p><br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/></p>

<p>我们渴望看到设计师是怎样架起这座桥梁的，或者用户是否一直满足于使用缓慢但可发现的控 件，直到有人告诉他们还有更快的手势。</p>

<p>第 18 章将谈到，图标按钮（ iconbimon) 是一项优秀的技术，用图标来提供从菜单向工具 栏过渡的记忆矢量途径，每项功能或设施都用图标标示，图标显示在处理该图标的用户界面的
    元素中：每个菜单、每个图标按钮、每个对话框、每次提到帮助文本的时候、每次提到印刷文 档的时候。界面上显示视觉符号构成的记忆矢量是最有效的方法，但是整个行业尚未大力挖掘。</p>

<p><span id="filepos0001643825"></span></p>

<p>有效功能工作集</p>

<p>由于常做的事情总会学会（通过重复），中级用户最终会记住一部分命令和特性。这一组记 下来的特性就是有效功能工作集 （working set )。组成用户工作集的命令对用户个人来说都是特
    殊的，尽管相似使用模式的用户工作集可能有相当大的重叠。例如，在 Excel 中，几乎每个用 户都会插入公式，设置字体和标签，以及打印页面。但是张三的工作集可能会包含绘制图形， 而李四的则可能包含链接表格。</p>

<p>设计师能够为使用方式建模并生成一个子集，满怀信心地得出结论，大多数用户都会频 繁访问这个子集。最少有效工作集可以通过使用分析（如果你正在工作的现有应用提供的话） 和 /
    或目标导向方法确定，使用场景发现人物模型的功能需求。这些需求就直接转化为最少工 作集。</p>

<p>任何用户工作集中的命令都是其最常使用的命令。用户希望这个命令调用起来快速简单。 这就意味着，设计师至少应该使用直接模态来设计应用程序主要用户使用的最少工作集中的所 有命令。</p>

<p>尽管按照定义，应用软件的最少工作集是每个用户全部工作集的一部分，但是用户个人的 偏好和工作要求会决定个人的工作集中额外包括哪些其他特性。即使那些为了企业运营而定制
    的软件也会提供一系列特性，供每个用户挑选。这意味着，设计师在提供直接访问最小工作集 的功能时，设计师还必须提供方法把其他命令提升为直接模态。同样，任何有直接模态的命令
    也要有对应的教学式版本，让初学者学会使用界面。这意味着，界面上大多数功能都应该有多 重命令模态。</p>

<p>但是这条规则有一个例外，那就是比较危险的命令，如擦除全部、清除和放弃修改等，这 些命令不应该与不小心被激活或者简易的直接模态命令相关联。相反，需要在菜单和对话框中 予以保护（与第 11 章的设计原则相一致 .•
    隐藏弹射座椅的操控杆）。</p>

<p>308</p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p><span id="filepos0001647095"></span></p>

<p>上下文帮助和辅助界面</p>

<p>无须赘言，最好的应用程序帮助应当在合适的时间、合适的位置在街面上提供辅助，但不 需要用户打断流（见第 11 章）去把它找出来。无论是在用户第一次使用某个应用软件的时候，
    还是使用单个控件或特性的特定时候，大量模式支持上下文帮助，或者帮助用户更容易地完成 相关任务。</p>

<p>导览教程和覆盖层教程</p>

<p>导览教程 （guided tour) 和覆盖层教程（ overlay) 在移动平台上流行，是因为这两种方式 合理地解决了用户初始学习问题。由于移动应用必须更加依赖于直接和隐形的命令模态（因为
    屏幕没有足够的空间来容纳教学式命令模态），所以导览和覆盖充当了引导新用户的角色。</p>

<p>这些模式尽管更适合移动应用，但越来越多地也用于桌面应用。二者都是通过简要概述典 型用法的最重要功能，引导用户学会使用新应用。</p>

<p>导览教程通过一组有序的屏幕或卡片图片介绍特性和界面行为，每个屏幕或卡片都包含简 短的文本和图片（如图 16-3 所示 ) 。它们要么按照重要程度来描述 • 组基本功能，要么带领用
    户完成一个典型的有序过程，如使用应用创建、编辑和分享分档。在教程中，用户滑动或点击 进入下一个屏幕。某种程度上来说，导览教程的结构类似于安装向导（ Wizard )。主要的区别在
    于，这些连续的卡片、屏幕或对话框不需要用户在应用软件中输入内容来进行配置，其存在只 是为了展示产品的功能和行为。</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00254.jpg"/></p>

<p>图16-3 FiftyThree Inc•的iOS应用，Paper用指导教程解释其主要特性及交互。用户滑动一组图片卡片，每一张都描
    述了一对不同的特性及交互方式.第一次打开应用的时候，点击公司的标志，可以打开关于菜单，从中开启教程。</p>

<p><br/>
    <br/></p>

<blockquote>
    309<br/>
    <br/>
</blockquote>
<p>About Face 4 :交互设计精髓</p>

<p>OS X 在鼠标设置和触控板手势的配置中有一个有趣的变体:用户界面上不是展示一系列大 致静态的图片，而是用记录着如何用手执行手势的简短、重复的视频片断，展示正在被配置的 手势。</p>

<p>导览教程通常会在应用第一次运行的时候自动启动，有时如果应用软件发布的新版本有重 要的新特性，也会自动启动。导览教程的每一个屏幕上都应该有一个 “ 跳过 ” 按钮，这是很重
    要的，这样可以让用户不看完所有屏幕直接进入应用。当然，最后还要有一个屏幕来结束教程。 教程的最后一个屏幕还要为用户提供可以手动重新启动教程的途径。</p>

<p>通常来说，指导教程最多不超过五到七屏。如果浏览过程看上去没完没了，用户会不耐烦 , 记不住所看到的东西。</p>

<p>覆盖层教程是另一个介绍功能的方式，适合相对简单的应用，功能用教学式方法展示不是 很明显。顾名思义，覆盖层就像在界面上放置了一层透明薄片，薄片上嵌入了箭头和描述性文
    本。最终结果是一组注释，指出了应用的关键特性或者行为，简要描述其用法（如图 16-4 所示)。</p>

<p height="0pt" width="0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p align="center" height="0pt" width="0pt"><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00097.jpg"/></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图164 Snapseed用覆盖层显示关键特性和行为。和某些使用关闭按钮覆盖层不同，Snapspeed允许用户点击屏幕上
    的任意位置关闭覆盖层。第一次使用之后，仍可以在帮助菜单中访问覆盖层。</p>

<p><br/>
    <br/></p>

<p>和指导教程一样，覆盖层教程通常在应用首次运行时（或者重大新版本发布升级时）启动。 覆盖层教程应该包括在应用中某个地方再次启动的方式，通常是在设置菜单中，或者在屏幕中 不起眼的角落放一个小小的帮助图标。</p>

<p>310<br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p>如图 16-5 所示的 Zite 是一个新闻阅读应用，组合了序列导览教程和覆盖层的概念。它引导 用户滑动浏览一些全屏覆盖层教程。最后在屏幕的中央会出现一个大大的 “ 完成 ” 按钮。</p>

<p><br/>
    <br/></p>

<table valign="top">
    <tr valign="top">
        <td bgcolor="#000" valign="top">
            <span bgcolor="#000000">&nbsp;</span> &nbsp;

            <blockquote>
                <font size="2"><font color="#FFFFFF">导览</font></font> <font color="#FFFFFF">.</font>

            </blockquote>
            </blockquote><br/>
            <br/>

            <p><font size="2"><font color="#FFFFFF">打开快速列表</font></font></p><br/>
            <br/>

            <p align="right" height="0pt" width="0pt"><font size="2"><font color="#FFFFFF">拖动杳看</font></font></p><br/>
            <br/>

            <p><font color="#FFFFFF">P</font> <font size="2"><font color="#FFFFFF">►拉回来</font></font></p><br/>
            <br/>
            <br/>
            <br/>
        </td>

        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>

        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>

        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>
    </tr>

    <tr valign="top">
        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>

        <td bgcolor="#000" valign="top"><span bgcolor="#000000">&nbsp;&nbsp;</span></td>
    </tr>
</table>

<p><br/>
    <br/></p>

<blockquote>
    图 <font size="2">16-5 Zite</font> 是一个新闻阅读应用，它将导览教程和覆盖层教程组合起来向用户介绍这款应用。随时点击菜单系统里的 标签就能启动导览。
</blockquote>
<p>这个方法很有用，因为每个谈到的特性都能在全屏的空间上下文中显示出来，这样有可能 让用户更容易地熟悉使用方法。</p>

<p>库和模板</p>

<p>使用创建文档类应用程序的用户，并非所有人都能从头创建格式良好的文档。不过，很多 应用都只给用户提供基本工具，相当于锤子、针和凿子。对某些用户来说，这就够了，但是其 他用户想要更多，他们想要半成品的桌子和椅子可以直接打磨上漆。</p>

<p>以 Mac 上 OmniGraffle 这样的应用软件为例，如图 16-6 所示，它能让用户创建出图表、流</p>

<p>程图和界面模型。</p>

<p>毋庸置疑，有些用户会从头创建图表，但是多数用户尽可能地从一些有样式的选择开始， 这些选择是以布局模板（ template) 的形式为用户制作的。类似地，尽管有些用户可能想要自己
    画箭头或星星等形状，但是大多数人还是比较乐意从预定义形状库（ gallery )中选择 (OminiGraffle 称之为 stencil) 。当然，用户选择了模板后，应该可以调整。</p>

<blockquote>
    311
</blockquote>
<p><img align="baseline" alt="" height="122" src="../Images/Image00352.jpg" width="144"/></p>

<p>About Face 4 :交互设计精髓</p>

<p><font size="1">Resource Browser</font></p>

<blockquote>
    <font size="1">RECENTS _ Templates ^ Stencils</font> 由 <font size="1">Other</font> <font size="1">TEMPLATES ^
    Miscellaneous S3 Automatic Layoi</font> 由 <font size="1">Imperial Units Metric Units S3 Software Oesign fij Space
    Planning</font>
</blockquote>

<p height="0pt" width="0pt"><font size="5">ERD</font></p>

<p><font size="1">Garrett IA</font></p>

<p><font size="2">Konigi Wireframes</font></p>

<p><i>m</i></p>

<p><font size="1">Flowchart</font></p>

<p><font size="1">IOS Wireframes</font></p>

<p><font size="1">Mac OSX Wir...</font></p>

<p height="0pt" width="0pt"><font size="5">STENCILS</font></p>

<blockquote>
    <font size="1">Miscellaneous ^ Common Q Maps ^ Science</font>
</blockquote>

<p><font size="1">UML-Ceneral</font></p>

<p><font size="1">UML-S«quence UML-State</font></p>

<p>rr</p>

<p><font size="2">图</font> 16-6 OmniGraffle <font size="2">专业版提供模板库，既有文档模板库，也有线条和形状模板库。</font></p>

<p>设计原则</p>

<p align="right" height="8pt" width="0pt">给用户提供一个现成模板库。</p>

<p>有些应用程序已经给用户提供了预定义模板库（例如微软 Office 套件和苹果的 iWork 套 件），但是很多软件还没有。一片空白让多数人害怕，如果用户不想处理空白文档，就别让他们 面对 <font
        size="2">。一</font> 个基本文档模板库就是不错的解决方案。</p>

<p>输入与内容区域提示</p>

<p>一种常见却不明显的情境帮助是 “ 提示 ” （ hint): — 块小小的文本，通常用灰底，在输入 字段提供简要说明或者使用范例。文本可以放在输入字段的下方（通常会用小一点的字体)，但
    更常见的是在字段获得输入焦点之前显示在输入字段内。一旦输入区域获得焦点，输入提示文 本就被清除了，然后就可以输入了。这个概念被扩展后，在一些应用中流行开来，这类应用的
    内容区域较大，或者在屏幕中央，起初是空白的。聪明的应用不会若无其事地呆坐一旁，而是 腾出手来帮用户搞清楚怎样开始，利用这个空间详细描述应该做什么。有的甚至会把一次性配 置控件作为内容区域提示（ contentareahint)
    的一部分，如图 16-7 所示。</p>

<p>312</p>

<p><br/>

    <br/></p>

<p>第 16 章为不同的需求而设计</p>

<p><br/>
    <br/>
    <br/>
    <br/></p>

<blockquote>
    <i><font color="#FFFFFF">Lightbox</font></i>
</blockquote>
<p><font size="2"><font color="#FFFFFF">AT&amp;T *=?•</font></font></p>

<p><font size="1"><font color="#FFFFFF">3：42 PM</font></font></p>

<blockquote>
    <i>No Photos</i>
</blockquote>
<blockquote>
    <img align="baseline" alt="" height="59" src="../Images/Image00316.jpg" width="383"/>
</blockquote>
<blockquote>
    <i>You can add photos by tapping</i> <font size="2">or +</font>
</blockquote>
<blockquote>
    <font size="2">图</font> 16-7 Camera+ <font size="2">是</font> iOS <font size="2">的一款照片应用，第一次启动的时候，图片内容区域是空白的，它会在这里提供一些详细提
    示和配置控件。</font>
</blockquote>
<p>向导的优缺点</p>

<p>向导（ wizard) 是微软发明的一个习惯用法，迅速在开发者和用户界面设计师中风靡。向 导带领用户进行一系列的操作步骤，以确保用户能够成功使用某一特性。向导能让用户轻松地
    处理复杂过程，通常用于配置应用的特性、操作系统，或者连接硬件设备等。</p>

<p>向导的每个对话框都会按顺序问用户一到两个问题，最后应用会执行用户请求的配置任务。 尽管问题的用意是好的，但是向导连珠炮弹似的提问，会让用户觉得像是在受审问，而且违反 了提供选择而不是提问题（见第 11 章）这一设计原则。</p>

<p>向导还有其他问题。大多数向导严格按照一步一步过程的方式编写，而不是机智地和用户 对话。这种类型的向导演变成确认消息的训练。用户学会了只要点击每个屏幕上的下一步按钮
    就行，不用认真地分析原因。而设计不好的向导还喜欢问晦涩难懂的问题。如果在一个普通的 对话框中，用户不知道 IP 地址是什么，那么他就会被向导迷惑。</p>

<p align="right" height="2em" width="0pt">313<br/>
    <br/></p>

<p>某些情况下，向导是合适的。一种情况是初次配置某一硬件设备时，需要注册、激活以及 设备、服务握手等。 iPhone 和 iPad 在让用户进入主屏幕之前，会开启一个简短的向导，让用户 选择语言、激活各种服务。同样的， Sonos
    智能音箱使用向导来识别添加到全住宅（ whole-home) 音频网络上的新设备，这需要控制器检测到一个按钮被按下。</p>

<p>还有一种适合使用向导的情况是在线调查界面。由于问卷是一整套问题，向导能够恰如其 分地将问卷分成不太让人生畏的小块，同时还用进度条鼓励人们作答。</p>

<p>对于其他大多数的内容来说，创建向导的更好方法是做出简单、自动的功能，不问用户任 何问题。直接把活儿干完，合理地推测出（基于过往行为或者使用精心调查出来的默认情形）
    恰当的属性和结构。然后用户可以使用标准工具，把输出改成自己认为合适的样子。也就是说， 最好的向导实际上更像智能版本的库或者模板。</p>

<p>设计向导旨在改善用户界面。但是有些情况下很多适得其反。向导给了开发者和设计师许 可，把原始实现模型界面放到复杂的特性中，还若无其事地保证 :“ 我们会用向导把它们变简单”。 这不禁让人想起那句放弃用户责任和易用性标准用语： “
    我们会把它写进手册”。</p>

<p>工具提示和覆盖式工具提示</p>

<p>工具提示（ tooltip)( 见第 18 章）是非模态交互式帮助的一个例子，用于桌面应用或者触 控笔应用非常有效。如果你要求用户解释如何完成界面任务，很可能指出屏幕上的对象辅助解
    释。这就是工具提示发挥作用的本质，所以这种交互是十分自然的。</p>

<p>不幸的是，对于移动应用来说，触摸屏不支持手指悬停。但是大多数移动应用没有足够 的空间，不允许在进行主要交互时，在屏幕上显示非模态解释。移动应用对于这个难题的解
    决办法是将桌面风格的工具提示和移动应用的覆盖层概念结合起来，就产生了覆盖式工具 提示。</p>

<p>覆盖式工具提示 （tooltip overlay) 通常由点击帮助按钮触发。针对主要功能的简短、工具 提示一样的标签或者注释显示在当前屏幕上，每条都相邻，指向关联的控件（如图 16-8 所示）。
    区别在于，覆盖式工具提示都是一起出现的，模态呈现，通常都有一个关闭按钮，点击才能关 闭提示。</p>

<p>这种方法虽然难以抗拒，但适用于复杂的创作型应用，可以用作备忘单，帮助用户记住控 件和功能。因此，该习惯用法最好不要用在欢迎界面。</p>

<p>314</p>

<p><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00009.jpg"/></p>

<p><font size="1">Return to Projects Page</font></p>

<p><font size="1">videos, photos, )s. montaqes ar</font></p>

<p><font size="1">taoes and titles</font></p>

<p><font size="1">ate and reorder clips with the Double-tap clips for options</font></p>

<p><font size="1">Tnm and time your clips with the Timeline</font></p>

<p><font size="1">Hide Popup Help</font></p>

<p>第 16 章为不同的需求而设计</p>

<p><font size="1">Import Media Share move or transfer project</font></p>

<p>FullSCfOri^</p>

<p><font size="1">Split clips</font></p>

<p><font size="1">Remove clip</font></p>

<p align="right" height="0pt" width="0pt"><font size="1">Learn about tricks and tips, si motion and other
    features</font></p>

<blockquote>
    <font size="2">图</font> 16-8 Pinnacle Studio <font size="2">有一个覆盖式工具提示功能，称为</font> “ <font size="2">弹出式帮助</font> ”
    <font size="2">（</font> pop-up help) <font size="2">■:从应用的帮助菜单可以
    启动该功能。它们的实现模型比较有意思，因为弹出式帮助激活时仍然能继续使用应用（这和通常的情况不同）；点击 左下角的按钮可以关闭，</font>
</blockquote>
<p><span id="filepos0001675041"></span></p>

<p><font size="5">传统的在线帮助</font></p>

<p>为初学者准备好指导教程、覆盖层教程或者其他 “ 快速开始 ” 帮助是很重要的。但更详细 的传统在线帮助应该针对已经成功使用该产品想提高使用水平的用户，即中级用户而设置。</p>

<p>有许多特性和功能的复杂应用应该带一份参考文档，在这里，想要开阔视野的用户能够找 到确切答案。许多用户倾向于用通用网络搜索引擎来寻找答案，但要确保所搜索到的网上答案
    是权威的。当用户从整体上研究应用的功能时，用户手册用印刷版，会比较舒服，但如果要快 速找到特定问题的答案，印刷版就显得烦琐了，而有索引和全文搜索功能的在线帮助则能体现 其优势。</p>

<p>全文搜索和索引</p>

<p>有了全文搜索（ full-text search) 功能后一般会放弃索引（ indexing ),因为索引需要大量工 作，但还是有理由慎重考虑这个决定。全文搜索的完整度不会超过帮助文本自身的措词，而文</p>

<p>315</p>

<p><br/>

    <br/>
    <br/></p>

<p>本内容中可能没有包含反映用户心理模型的语言。</p>

<p>用户需要解决问题时可能会想 “ 怎么才能把这个单元格变黑 ” ，而不是“怎样才能给这个单 元格设置 100% 的阴影 ” 。如果帮助文本或其索引没有抓住用户措辞或思考的方式，那么帮助系
    统就不能起作用了。通常，在索引里，会比在帮助文本中创造这种同义词映射更容易。创建这 种索引需要检查应用及其所有的特性，而不能仅仅检查帮助文本本身。这并不容易做到，因为
    它既要求编纂索引的人技术高超，还要精通应用的每个特性和功能。</p>

<p>索引项 （index entry) 集合无疑同帮助文本本身一样重要。用户会轻易地原谅编写得差的 索引项，但是不能原谅该有索引项的地方却没有。创造文本和索引的时候越是采用目标导向的
    思维，那么在用户寻找答案的时候，文本和索引就越能符合用户的需求。</p>

<p>使用索引的杰出例子可参见艾尔玛 • 龙鲍尔 （Irma S. Rombauer) 和玛丽昂 • 龙鲍尔•贝 克尔 （Marion Rombauer Becker) 所著的《烹妊之趣》（ 77^ Jqyo/CoWwg
    )。它是作者用过的最 完整、最强大的索引之一。</p>

<p>有时候，重新制作界面提高其易学性，比创造一个真正好的索引要容易。尽管好的在线帮 助非常有用，通常也很关键，但那也扶不起一个设计糟糕的产品。优良的设计应该大幅降低用 户对帮助系统的依赖。</p>

<p>概述</p>

<p>大多数在线帮助系统缺失的另一个组成部分是概述（ overview) 。例如，用户想要知道“输 入宏 ” 命令的工作原理，帮助系统的解释是 “ 把宏输入到系统的功能 ” ，这个解释一点用也没有。
    用户要知道的是适用范围、效果、力量、优势、缺陷、通用过程、为什么非要用这个功能、与 其他供应商的同类产品相比为什么要用它。要确保在前面用概述解释这些基本概念。</p>

<p>应用内用户指南（ in-app user guide) 越来越多的软件应用在线发布，不提供印刷版手册，但参考文档的需求仍然存在。通常， 设计优良的移动应用或者简单的桌面应用不需要用户指南。但是对于有一定复杂度的平板电脑
    创作工具，如数字音频工作站及其他专业的媒体编辑软件，或者对于各类的桌面效率类软件， 提供内置的用户指南很有用，这样随时都能从帮助菜单中访问（如图 16-9 所示)。</p>

<p>应用内用户指南不应该是帮助的首选，而导览教程和覆盖层教程才是。相反，应用内用户 指南是使用复杂功能时用来查看详细信息的。如果一个复杂的专业工具应用有内置指南，用户
    会很高兴，因为他们不需要再去网站找，如果指南的目录有超链接，指南本身能够全文搜索、 索引良好、可打印，用户会更高兴。</p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p align="center" height="2em" width="0pt"><img class="responsive-img" align="baseline" alt=""  src="../Images/Image00030.jpg"/></p>

<p>图16-9 Steingerg的Cubasis应用中有一个先进的帮助系统，既有可搜索的应用内用户指南.还有指向用户论坛和视 频教程的链接。</p>

<p><br/>
    <br/>
    <span id="filepos0001682463"></span></p>

<p><font size="6">可定制性</font></p>

<p>通常，交互设计师都会面临是否让用户自己定义产品的难题。有的用户想要按照自己的方 式处理事情，而这么做明显会导致问题，因为熟悉的元素被移动或隐藏，导致导航不能用，设计
    师夹在用户需求和需求引发的问题之间进退维谷。而解决办法就是，换一个角度看待这个问题。</p>

<p><span id="filepos0001683019"></span></p>

<p>个性化</p>

<p>人们喜欢照自己的喜好改变周围的事物。即便是初学者都想给常用的应用贴上自己的印迹 , 完全按照自己的偏好来改变，使应用软件体现自己的独特品味，更遑论中级用户了。人们这么
    做的原因和物理世界的行为一样，会在完全相同的工位上贴上配偶和子女的照片、放上植物、 心爱的油画、名言和卡通形象。</p>

<p>装饰诸如墙壁之类的持久对象 （persistent object) ，不需要重大结构变化就能体现个性。 个性化也会让人觉得某个走廊和其他十几个相同的走廊不一样，是因为这条走廊里挂着莫里</p>

<blockquote>
    317<br/>
    <br/>
</blockquote>
<p>About Face 4 : 交互设 ii^gf 茨 • 科内利斯•埃舍尔（ M.C.Escher) 的招贴画。个性化（ personalization) 这个词描述的就是</p>

<p>对持久对象的装饰或修饰。</p>

<p>改变屏幕上对象的颜色也是一项个性化任务。Windows在这方面向来都很方便，允许用户 单独改变Windows界面任一组成部分的颜色，包括桌面本身的颜色和模式，还赋予用户一项实
    用能力：改变系统字体。个性化是特质模态的（idiosyncratic modal) ( 本章稍后将会讨论）：用 户要么爱它，要么不爱它。两种类型的用户，设计师都必须考虑到。</p>

<p>个性化工具必须简单，容易使用，给用户选择的对象提供可视化预览。最重要的是，个性 化必须容易撤销。如果一个对话框让用户更改颜色，也应该提供功能让用户将一切恢复为出厂 设置。</p>

<p>个性化让人们的工作场所更亲切、更熟悉、更加人性化，让人们更乐意待在里面。软件也 一样，让用户能够装饰自己的应用程序既有趣，也有可能成为实用的导航助手。</p>

<p>另一方面，移动持久对象会妨碍导航。如果周末后勤人员进入你的办公室，重新安排所有 的隔间，你周一早晨再次找到自己的办公室会很困难。（第 12 章讨论过持久对象及其对导航的 重要性。）</p>

<p>这明显矛盾吗？并非如此。给持久对象添加装饰有助于导航，而移动持久对象却会阻碍导 航。配置（ configuration) 这个词就是用来指移动、添加或删除持久对象的。</p>

<p><span id="filepos0001687195"></span></p>

<p>配置</p>

<p>配置比较适合经验丰富一点的用户。中级用户建立起有效功能的工作集以后，会想要配置 界面，让这些功能更容易找到、使用。他们会为了速度和易用而调整应用，但是无论如何，自 定义配置的程度都是从轻微到适中渐进的。</p>

<p>配置对于专家用户来说是必需的。专家用户已经不需要比较传统的导航辅助，因为他们对 产品了如指掌。专家用户可能每天都花好几个小时使用该应用软件，实际上，他们完成的大部 分工作可能使用的都是该应用软件。</p>

<p>移动工具栏控件是个性化的一种方式。多数桌面应用最左边的三个工具栏控件分别是新建 文件、打开文件和保存文件，它们太常见，因此可以当做持久对象。用户移动这三个控件既是
    在配置应用，也是在个性化设置。因此，配置和个性化二者之间存在灰色区域。</p>

<p align="right" height="6pt" width="0pt">只要应用能完成工作，多数中级用户不能配置应用，也不会咆哮。而有些熟练用户则会觉
    得被怠慢了，不过只要应用软件还能按照他们预想的那样运行，他们还是会使用并且欣赏这款</p>

<p>318<br/>
    <br/></p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p>应用软件的。但是有时候，灵活性很关键。如果要为一个快速演变的工作流程做设计，那么最 重要的是，用来支持工作流程的软件也要快速演变。</p>

<p>此外，企业的 IT 经理也重视配置。配置让他们能够巧妙地强制企业用户实行标准方法或者 遵从标准。如果软件能够在菜单和工具栏中添加宏和命令，他们会很高兴，因为这样通用软件 就能和已经建立起来的公司流程、工具和软件紧密配合了。许多 IT
    经理的购买决策取决于应用 程序是否能轻易地根据他们的企业环境配置。如果他们要购买一款应用软件的一万或者两万份 拷贝，他们会理所当然地认为这款应用软件应该能够适应他们的工作方式。因此，微软 Office
    应用程序成为市面上配置度最高的套装软件并非偶然。</p>

<p><span id="filepos0001690398"></span></p>

<p>特质模态行为</p>

<p>通常，可用性测试 （usability testing) 可能表明，用户在用户界面习惯用法的效用问题上， 几乎平分成两半：一半用户明确偏好一种习惯用法，而另一半用户则偏好另一种用法。用户偏
    好明确地分成两组或更多组表明，他们的偏好是特质模态的（ idiosyncraticallymodal )。</p>

<p>开发组织也会类似地从情感上分成不同阵营：一组成为菜单项阵营，其他开发者则是工具 栏阵营。他们争吵和辩论这两个方法孰优孰劣，不过答案就在眼前：两个都用！</p>

<p>如果用户各有偏好的习惯用法，分成不同阵营，那么软件设计师必须都满足各个阵营的需 求。不论你和你的幵发者隶属哪个阵营，满足一半人而得罪另一半人，一点好处都没有。</p>

<p>Windows 在菜单的实现中提供了如何迎合特质模态要求的绝佳例子。有些人希望菜单能像 原来在苹果麦金塔上那样：点击菜单栏项目，菜单就会出现，然后按着鼠标不放，顺着菜单往
    下拖动，移动到所需选项上松开鼠标按钮。而有些人觉得这个过程很难做，更喜欢拖动时不必 按住鼠标按钮。 Windows 满足了这种偏好，允许用户点击菜单栏项目后松开鼠标，菜单就会出
    现。接着，用户可以不用按着按钮，把鼠标移到所选的菜单项，再点击并松幵鼠标按钮，就可 以选中菜单项并关闭菜单。用户仍可按着鼠标拖动来选择菜单项。这两种习惯用法的卓越之处
    是，它们能够和平共处。任何用户都能二者混用，或者坚持只用其中一个。不用做出选择，也 不论偏好如何，它都能正常工作。</p>

<p>从 Windows 95 开始，微软在标准菜单行为上添加了第三种特质模态的习惯用法：用户照 旧点一下就放开，但是可以沿着菜单栏拖拉鼠标，其他菜单依次自动被触发（但是这种行为没 有延续到 Ribbon 用户界面）。现在， Mac
    菜单对这三种习惯用法都支持，而且令人惊讶的是， 三种用法和睦相处。</p>

<blockquote>
    319
</blockquote>
<p>About Face 4 :交互设计精髓</p>

<p><span id="filepos0001693972"></span></p>

<p><font size="6">本地化和全球化</font></p>

<p>本地化（ localization) 指的是按特定的语言和文化翻译某个应用软件。全球化（ globalization) 是指让应用软件尽可能地在多种语言和文化下通用。将应用软件设计得能适用于不同的语言和
    文化，给设计师带来了特殊的挑战。而命令模态能够提供一些指导。</p>

<p>如直接操作和工具栏图标按钮等直接界面是习惯用法（见第 13 章），都是可视化的而非文 本化的。因此，使它们全球化相当轻松。当然，重要的是，设计师应事先做足功课，确保这些
    习惯用法选用的颜色或符号在不同文化中没有设计师不想要的特殊意义（例如，在日本，复选 框打叉可能被理解为取消选择而不是选中）。但是，通常情况下，没有隐喻意义的习惯用法对于 全球化的界面来说应该相当安全。</p>

<p>菜单项、字段标签、工具提示等教学性提示是界面依赖语言，因此它们是本地化的主题， 必须翻译成恰当的语言。在创建必须本地化的界面时，需要谨记以下几点：</p>

<blockquote>
    • 有些语言中单词和词组比较长。例如，德语单词平均会比英语单词长很多，而西班牙 语的句子往往比其他语言的都要长。要相应地安排按钮及其他文字标签的排列，尤其 是在空间有限的移动设备上。
</blockquote>
<blockquote>
    • 有些语言的单词，尤其是亚洲语言，很难按字母顺序排序。
</blockquote>
<blockquote>
    • 不同国家使用日、月、年的顺序不同，使用 12 小时制还是 24 小时制也不同。
</blockquote>
<blockquote>
    • 数字和货币中小数点的使用方式不同。有些国家逗号和句号的使用方法和美国不一样。
</blockquote>
<blockquote>
    • 有些国家使用星期记日（例如，第 50 周表示十二月中旬），有些国家使用的历法也跟 公历不同。
</blockquote>
<p>翻译菜单项和对话框时要从整体上考虑，确保翻译后的界面能保持整体连贯，这是很重要 的，单独直接翻译的项目和标签，与其他独立翻译的项目组合起来时，可能会混乱。界面语义 不仅要从宏观上不变，在细节上也应保持原义。</p>

<p><span id="filepos0001697897"></span></p>

<p><font size="6">无障碍性</font></p>

<p>无障碍性（ accessibility) 设计意味着，设计应用时应考虑到，无论是因为年龄、事故或 疾病而有认知、感官或者移动障碍的人，还是没有此类障碍的人，都能够有效使用所设计的</p>

<p>应用。</p>

<p align="right" height="0pt" width="0pt">第 16 章为不同的需求而设计</p>

<p>世界卫生组织估计，全世界有 7.5 亿人有某种残疾。但是，无障碍性是交互设计中常被忽 视的一个领域，在用户体验中也常被忽视。技术产品往往不能很好地服务于残障用户。</p>

<p>尽管并非每个应用都需要无障碍措施或进行无障碍性设计，但是可以说，大多数企业和消 费应用，都有需要无障碍界面的用户。尤其有些面向罹患严重或衰弱性疾病老人或者病人的应 用，更需要无障碍界面。</p>

<p><span id="filepos0001699405"></span></p>

<p>无障碍的目标</p>

<p>一个无障碍的产品或服务，不管面对普通用户还是残障用户，都必须满足下列条件：</p>

<p>• 用户能够感知和理解所有的指示、信息和反馈。</p>

<p>• 用户能够感知、理解并轻易地操控所有控件并进行输入。</p>

<p>• 用户能够轻易地导航，并且总能知道所处界面的位置及其导航结构。</p>

<p>这些条件（尤其是前两个）并不需要在面向所有用户的单个用户界面中全部满足。典型的 无障碍措施是设计一个单独的无障碍模式，或者一系列的无障碍选项。这些选项会改变屏幕对
    比度和颜色、改变文本字体的大小和粗细，或者打开屏幕阅读器和声音导航系统。</p>

<p><span id="filepos0001700713"></span></p>

<p>无障碍人物模型</p>

<p>在设计的搜索和建模阶段，作为无障碍措施的一部分，可能会考虑创建一个无障碍人物模 型 （accessibility persona) ，加入到人物模型集中。当然，创建这个人物模型最理想的方法，是
    采访那些因为残障而影响使用产品的用户或者潜在用户。如果该方法行不通，还有一个针对性 较弱的方法，创建一个临时人物模型，来帮助把重点放在无障碍问题上。通常，无障碍人物模
    型会被当做次要人物模型，它除了和主要人物模型有同样需要外，还有特殊需要，必须在不牺 牲用户体验的前提下，解决这些需求。不过有些情况下，把无障碍人物模型当做主要人物模型 能够产生突破性的产品，正如 0X0 和 Smart Design
    用 Good Grip 产品做到的一样 —— 结果表明， 为患有关节炎患者优化的厨房工具，能让所有人更满意。</p>

<p><span id="filepos0001702152"></span></p>

<p>无障碍指导方针</p>

<p>设计产品，需要探索残障用户对于产品的特殊需求，以及所涉及的设计折中方案，以下 10 项指导方针并不能替代这些探索。但这些方针的确提供了合理的起点来处理无障碍应用设计。 下面逐一详细讨论。</p>

<p align="right" height="2em" width="0pt">321</p>
</body>
</html>
